
On Wed, Jan 14, 2009 at 5:04 PM, Paolo Losi
2) I have written some support functions: mapM' and filterM'
Are they well written and generic?
mapM' is generic and already implemented: fmap (Note that a Monad is also a Functor)
Except for when it isn't, which is really annoying because it ought to be. I just pretend it is, and then grit my teeth and kill a baby when I get bitten. And mapM' is not fmap, but fmap.fmap (or liftM.map if you prefer).
filterM' is specific enough not to deserve any package filterM' = fmap . map
Uh, I think you're looking at the wrong one. filterM' :: (a -> m Bool) -> m [a] -> m [a] I would write this as: filterM' p = filterM p . return And then probably just go inline it.
that I like more...
Are they already available in some package?
Can you suggest better names? 3) I find (,) node `liftM` walkTree' path not very readable. Is it possible to express it in a more (not too much) verbose way?
I find it readable... It's ok IMO.
A bit ugly, perhaps. With the notation from Control.Applicative: (,) node <$> walkTree' path I would really like to be able to do a proper-looking tuple section though; (node,) <$> walkTree' path Luke