[Haskell] Monadic parser combinators with logging
Andrew Pimlott
andrew at pimlott.net
Thu Aug 3 02:58:00 EDT 2006
On Thu, Aug 03, 2006 at 08:40:26AM +0200, Harald ROTTER wrote:
> Thanks for the hint, I will try to implement the suggested monadic
> structure.
I realized perhaps I should have made the hint slightly more explicit by
changing the name:
newtype ParserT m a = ParserT { runParserT :: (PState -> m [(a, PState)])}
But I know you would figure it out either way. :-)
> As for the MonadState declaration:
>
> If I put
> instance MonadState PState Parser
>
> then ghci complains:
> Illegal instance declaration for 'MonadState PState Parser'
> (The instance type must be of form (T a b c)
> where T is not a synonym, and a,b,c are distict type variables)
> In the instance declaration for 'MonadState PState Parser'
>
> I found out that invoking ghci with "-fglasgow-exts" solves the issue nut I
> have to admit that I do not really understand what's so special about this
> instance declaration to make it require the extensions.
You would need -fglasgow-exts anyway for a multi-parameter (ie., two
types, PState and Parser) instance. Haskell 98 has quite limited
support for typeclasses, compared to current practice. I wouldn't worry
much about the above error--but that said, I suspect your PState is a
type synonym, which as the error message says is forbidden (in Haskell
98).
Andrew
More information about the Haskell
mailing list