Advertisement
Guest User

Untitled

a guest
Jun 4th, 2018
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. fun some(p: 'a Parser): ('a list) Parser = some_v p
  2.     and many_v p = (some_v p) <|> ret nil
  3.     and some_v p = ((curry (op ::)) <$> p) <*> (many_v p)
  4.  
  5. - use "src/combinators.sml";
  6. [opening src/combinators.sml]
  7. [autoloading]
  8. [library $SMLNJ-BASIS/basis.cm is stable]
  9. [autoloading done]
  10. signature COMB =
  11.   sig
  12.     datatype 'a Parser = Parser of {parse:string -> ('a * string) list}
  13.     val curry : ('a * 'b -> 'c) -> 'a -> 'b -> 'c
  14.     val elem : string -> char -> bool
  15.     val >>= : 'a Parser * ('a -> 'b Parser) -> 'b Parser
  16.     val <*> : ('a -> 'b) Parser * 'a Parser -> 'b Parser
  17.     val <$> : ('a -> 'b) * 'a Parser -> 'b Parser
  18.     val <|> : 'a Parser * 'a Parser -> 'a Parser
  19.     val ret : 'a -> 'a Parser
  20.     val some : 'a Parser -> 'a list Parser
  21.     val many : 'a Parser -> 'a list Parser
  22.     val pfail : 'a Parser
  23.     val pcombine : 'a Parser -> 'a Parser -> 'a Parser
  24.   end
  25. structure Combinator : COMB
  26. val it = () : unit
  27. - val f = Combinator.some Combinator.pfail
  28. = ;
  29. stdIn:3.5-3.41 Warning: type vars not generalized because of
  30.    value restriction are instantiated to dummy types (X1,X2,...)
  31. ^C
  32. Interrupt
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement