Thomas Conway wrote:
p `with` f = p >>= (return . f)

so I can write

primary = (identifier `with` PrimaryIdentifier) <|> (stringLiteral
`with` PrimaryLiteral)

I would write

primary = PrimaryIdentifier `fmap` identifer
      <|> PrimaryLiteral    `fmap` stringLiteral

(I prefer fmap to liftM but they are the same for monads). To my mind this fits the general pattern of 'constructor comes before contents'. with is, of course, just fmap with the parameters reversed.

It's a question of taste if it's better to define a new name or use an existing one.


p `returning` x = p >>= (\_ -> return x)

I see no convincing reason to prefer that to

p >> return x

(which is fewer characters and, to me, just as clear).

In fact I'll also use

do { p ; return x }

and which of the two I choose will depend on context. If this is part of a large 'choice' construct I prefer to have each branch using the same notation (all do, or all not do).

Jules

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to