Combinators for ReadP

Martin Sjögren msjogren at
Mon Jul 26 07:17:51 EDT 2004

On Mon, 26 Jul 2004 11:00:31 +0100, Malcolm Wallace
<malcolm.wallace at> wrote:
> > While we're discussing changes, is there an overwhelmingly good reason
> > for the use of local quantification beyond making the type signatures
> > simpler? Writing
> >   newtype ReadP r a = R ((a -> P r) -> P r)
> > (like in ContT) would make ReadP completely Haskell98 as far as I can tell.
> I think you'll find that without the local universal quantifier,
> you cannot make ReadP a (useful) instance of Monad, because your
> 'r' parameter would be fixed across >>=, whereas it really needs to
> be variable.

Uhh. But it works for ContT, so why not for ReadP? The only point time
you have to fix the r is when you want to "run" the parser, all other
parsers will be polymorphic in r:

parseFoo :: ReadP r Foo
parseBar :: ReadP r Bar

readP_to_S :: ReadP a a -> ReadS a

I do exactly this in the package description parsing code of Cabal
(using a locally hacked ReadP, Cabal really must be H98...), and it
works just fine.


More information about the Libraries mailing list