[Haskell-cafe] Parsec question

Levi Stephen levi.stephen at optusnet.com.au
Thu Jun 21 19:51:51 EDT 2007


Tillmann Rendel wrote:
>
> My self-defined monadic combinator of choice to use with parsec is
>
>   a >>~ b = a >>= \x -> b >> return x
>
> It works like (>>), but returns the result of the first instead of the 
> result of the second computation. It is kind of an alternative for 
> between:
>
>   between lparen rparen p   ==   lparen >> p >>~ rparen
Cool. I've always liked how Parsec made parsers so readable, and this 
makes it even more so.
>
> It can be usefull like this:
>
>   data Term = TVar Identifier | TTerm Identifier [Term]
>
>   term =     (return TTerm
>               `ap` try (identififer >>~ lparen)
>               `ap` (term `sepBy` comma >>~ rparen))
>
>          <|> (return TVar
>               `ap` identifier)
>
> After accepting lparen, the second branch is discarded.
Interesting. I think I'll have to keep this one around. Not sure if I'll 
need it, but its the kind of thing that would have taken me a while to 
solve ;)

Levi
lstephen.wordpress.com


More information about the Haskell-Cafe mailing list