
I'm +1 for getting the Prelude to eventually say: class Semigroup a where mappend :: a -> a -> a mconcat :: [a] -> a (<>) = mappend infixr 6 <> class Semigroup a => Monoid a where mempty :: a instance Semigroup a => Monoid (Maybe a) where... The long path seems the most sensible way to get here with a minimum of breakage. Tis a shame it'll take so long to complete. (ObBikeshed: Honestly, I'd rather see: class Semigroup a where (<>) :: a -> a -> a concat :: [a] -> a -- or: concat :: Foldable f => f a -> a ...getting rid of the mwhatever naming scheme and avoiding taking two names for one function. The name "concat" is pretty ubiquitously used for monomorphic variants of the [a]->a type. The notable exception being Foldable.concat, which relies specifically on using the [a] semigroup for no especially interesting reason I can discern. But I'm pretty sure that ship has sailed unless we give up hope of providing a breakage-free upgrade path.) -- Live well, ~wren