
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.