
On Mon, Sep 27, 2010 at 3:16 PM, Felipe Lessa
adjustM f k m == liftM (\x -> insert k x m) (f $ lookup k m )
This suggests that you don't need the Monad constraint, only Functor.
That's just because I hid the case where `lookup k m` fails. I'm sure looking at other desirable *M functions would reveal similar issues with using Functor alone. adjustM f k m == case lookup k m of Just x -> liftM (\new -> insert k new m) (f x) Nothing -> return m translating this to Functor: adjustF f k m == case lookup k m of Just x -> fmap (\new -> insert k new m) (f x) Nothing -> ??? -- perhaps "pure m" thus adding another constraint, but how would that be better than Monad for most people? Cheers, Thomas