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