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