FunctorM

Graham Klyne GK at ninebynine.org
Fri Jun 4 05:53:33 EDT 2004


At 00:55 04/06/04 -0700, Ashley Yakeley wrote:
>In article <20040528001157.GA1924 at momenergy.repetae.net>,
>  John Meacham <john at repetae.net> wrote:
>
> > class FunctorM f where
> >     fmapM :: Monad m => (a -> m b) -> f a -> m (f b)
>
>I have an equivalent (I think) class in HBase in its big library of
>Functor classes:
>
>     class (Functor f) =>
>      ExtractableFunctor f where
>     {
>         fextract :: forall g a. (FunctorApplyReturn g) =>
>             f (g a) -> g (f a);
>     };
>
>     for :: (ExtractableFunctor f,FunctorApplyReturn m) =>
>      (a -> m b) -> (f a -> m (f b));
>     for foo fa = fextract (fmap foo fa);
>
>The important thing here is that a FunctorApplyReturn is more general
>than Monad, it has only return and "fapply :: f (a -> b) -> f a -> f b".

I think the monadic 'zero' may be useful in applications of FunctorM, in 
that it provides a way to cleanly handle errors encountered during the 
"traversal".

#g
--

>Given this, it's also possible to write this function (by using a state
>monad):
>
>     ftolist :: (ExtractableFunctor f) => f a -> [a]
>
>The main Functor classes in HBase are arranged like this:
>
>     Functor <= FunctorApply <= FunctorApplyReturn <= Monad
>
>Doubtless if I knew a little more category theory, I'd have better names
>for them. It would be nice if the standard libraries adopted a
>superclass arrangement like this...
>
>--
>Ashley Yakeley, Seattle WA
>
>_______________________________________________
>Libraries mailing list
>Libraries at haskell.org
>http://www.haskell.org/mailman/listinfo/libraries

------------
Graham Klyne
For email:
http://www.ninebynine.org/#Contact



More information about the Libraries mailing list