On Fri, 7 Jan 2011, Brandon S Allbery KF8NH wrote:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 1/7/11 21:56 , Tony Morris wrote:
 I am wondering if it possible to generalise catMaybes:

(Something f, SomethingElse t) => t (f a) -> t a

I have being doing some gymnastics with Traversable and Foldable and a
couple of other things from category-extras to no avail. Perhaps
someone else's brain is molded into an appropriate shape to reveal an
answer!

Looks to me like you want something like:

mtraverse :: (Traversable t, Monoid m) => t m -> m
mtraverse xs = traverse mappend (mempty:xs)

or possibly the same kind of thing using MonadPlus instead of Monoid.

This is not type-correct, isn't it?

Foldable.fold has the type, that you propose.


For me, the solutions of Dave Menendez make most sense: Generalize Maybe to Foldable and List to MonadPlus.

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

Reply via email to