Has anyone developed a typeclass model for (Control.Monad.mapM) and related
 functions for arrows?

I've a preliminary model, using Adam Megacz's Generalized Arrows, of the
form:

class (GArrowDrop a (**) u) => GArrowMap_ a (**) u c where
   mapA_ :: a d u -> a (c d) u

class (GArrow a (**) u c) => GArrowMap a (**) u c where
   mapA :: a d r -> a (c d) (c r)

class (GArrowMap a (**) u c) => GArrowJoin a (**) u c where
   join :: a d (c r) -> a (c d) (c r)

class (GArrow a (**) u) => GArrowUnion a (**) u c where
   union :: a ((c r) ** (c r)) (c r)

class (GArrowMap a (**) u c, GArrow a (++) v) => GArrowPartition a (**) u
(++) v c where
   partition :: a d (q ++ r) -> a (c d) ((c q) ** (c r))

Motivations: regular arrows (including GArrows) expose simple products for
behavior, but those have a static 'width' and don't seem suitable for
processing large values. ArrowApply would give me a dynamic amount of
processing, but seems excessively expressive. In my own case, 'c' might be
representing an asynchronous or distributed, reactive collection, so the
ability to restrict expressiveness is important for performance.

I'm wondering if you know of any other work along the same lines.

Thank you,

Dave
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to