Collecting values from Functors?

Tomasz Zielonka t.zielonka@students.mimuw.edu.pl
Wed, 4 Jun 2003 20:38:30 +0200


On Wed, Jun 04, 2003 at 11:15:30AM -0700, Hal Daume III wrote:
> > I'm trying to figure if there's any way I can use (say) monads to collect 
> > values from a Functor.
> > 
> > For example, suppose I have a tree of some values that supports fmap, is 
> > there any way I can use the fmap function to collect a list of all the node 
> > values?
> 
> No, you need a fold to do that.

Or a variant of Functor constructor class that I have proposed some time
ago on comp.lang.functional:

class FunctorM t where
    fmapM :: Monad m => (a -> m b) -> (t a -> m (t b))
    fmapM_ :: Monad m => (a -> m b) -> (t a -> m ())
    fmapM_ f t = fmapM f t >> return ()

instance FunctorM [] where
    fmapM = mapM
    fmapM_ = mapM_

Best regards,
Tom

-- 
.signature: Too many levels of symbolic links