
On Fri, Dec 10, 2010 at 11:22:08PM -0800, dan portin wrote:
Hi,
*unflt* was a poor choice of name. *flt2*, which flattens a datatype containing a flattenable datatype, would have been a better name.
If I was making a flatten class, I wouldn't want Monad as a constraint on the result container. Monad doesn't really say anything about "containers" - there are some containers that are Monads, but there are monads that aren't containers and there are containers that aren't monads.
You're right. My initial class was
class Monoid m => t -> m where flt :: t -> m
instance (Tree a) [a] where flt = fltTree instance (Maybe a) [a] where flt = maybeToList
It sounds a lot like you want the "Foldable" class from Data.Foldable. Is that what you are looking for? If not, can you explain the particular way in which Foldable does not meet your needs? -Brent