[Haskell-cafe] Question on definition of `parse' function in Parsec library.
Christian Maeder
Christian.Maeder at dfki.de
Mon Oct 10 14:27:24 CEST 2011
Am 08.10.2011 16:04, schrieb Captain Freako:
> Hi all,
>
> In this definition from the Parsec library:
>
> parse :: (Stream s Identity t)
> => Parsec s () a -> SourceName -> s -> Either ParseError a
> parse p = runP p ()
>
>
> what's the significance of `Identity t'?
> (`t' isn't used anywhere.)
http://hackage.haskell.org/packages/archive/parsec/3.1.2/doc/html/Text-Parsec-Prim.html#t:Stream
Text.Parsec.Prim contains
class Monad m => Stream s m t | s -> t where
saying that the type s determines t (that is a functional dependency).
The instances are:
Monad m => Stream ByteString m Char
Monad m => Stream ByteString m Char
Monad m => Stream Text m Char
Monad m => Stream Text m Char
Monad m => Stream [tok] m tok
so usually you have a character stream. (There are lazy and strict
version of Text and ByteString.) The last instance also works for plain
strings (String = [Char]).
Using "Identity" for the monad m just means, that you actually do not
need a monad (but need to supply a dummy one).
If you want to keep thinks simpler you could use packages parsec1 or parsec2
Cheers Christian
http://hackage.haskell.org/package/parsec2
http://hackage.haskell.org/package/parsec1
>
> Thanks,
> -db
More information about the Haskell-Cafe
mailing list