[Haskell-beginners] functional parser type error
Brent Yorgey
byorgey at seas.upenn.edu
Wed Apr 4 19:31:13 CEST 2012
On Wed, Apr 04, 2012 at 10:54:45AM +0100, felipe zapata wrote:
> Hi,
> The parser is defined
>
> *type Parser a = String → [(a, String)]*
> *
> *
> But for me it is not pretty clear, why i need to
> make Parser a newtype instead of working
> with this one.
In order to use do-notation, Parser has to be an instance of Monad.
However, ((->) String) is already an instance of Monad, and it's not
the instance you want for Parser. There cannot be two instances for
the same type, so you must wrap it in a newtype in order to make a
different instance.
The other option is to just implement your own operators
(>==) :: Parser a -> (a -> Parser b) -> Parser b
returnP :: a -> Parser a
and use those directly, though then you cannot use do-notation.
-Brent
More information about the Beginners
mailing list