
oh. pure haskell98... i forgot that old problem. :/ well, i still miss the arrow-(&&&)-version of that monoid. but, to newtype it, may be the better solution. [code] newtype ParArrow f a b = ParArrow (f a b) -- monoid iff b is monoid newtype SerArrow f a b = SerArrow (f a b) -- monoid on endomorphisms instance (Arrow f) => Arrow (ParArrow f) where ... -- derived instance (Arrow f) => Arrow (SerArrow f) where ... -- derived instance (Arrow f, Monoid b) => Monoid (ParArrow f a b) where mempty = pure (const mempty) mappend a b = (a &&& b) >>> pure (uncurry mappend) instance (Arrow f) => Monoid (SerArrow f a a) where mempty = pure id mappend = (>>>) [/code] Am Dienstag, 25. Oktober 2005 19:05 schrieb Iavor Diatchki:
Hello, These instances overlap, which is not allowed in Haskell. -Iavor
On 10/24/05, Marc A. Ziegert
wrote: Excerpt (revised): [code] class Sequence m where sequence :: [m a] -> m [a]
instance Monad m => Sequence m where sequence = Control.Monad.sequence
instance (Arrow f) => Sequence (f a) where sequence [] = pure (const []) sequence [f] = f >>> pure (:[]) sequence (f:fr) = (f &&& sequence fr) >>> pure (uncurry (:))