
Hal Daume
I know this has been written about way too much, but I was wondering what people thought about using 'liftM f' as opposed to '>>= return . f'. I would probably have written Andrew's code using liftM, but I don't know if one is necessarily better than the other. Does anyone have strong thoughts on this?
I tend to use liftM only as part of a pattern of lifting a family of non-monadic functions up to the monadic level in code like this: instance (Monad m, Num a) => Num (m a) where (+) = liftM2 (+) (-) = liftM2 (-) negate = liftM1 negate ... instance (Monad m, Integral a) => Integral (m a) where ... If it doesn't feel like lifting and/or it isn't part of a pattern like the above, I tend not to use it. A