Is there a standard class that looks something like this: class (Monoid m) => MonoidBreak m where mbreak::a->m a->(m a,m a) and it should follow some law like: m == uncurry mappend $ mbreak x m -Alex-