
Everything here makes much more sense than the previous implementation
-- I've upped 1.2, which splits up |append|, implements the instances
in terms of Monoid, etc.
Also included is |toList| and |toList_| , which are like functions
defined in Felipe's earlier email to me. The first returns the cap and
values, the second only the values.
Last (but not least), some of the |append*| functions are now defined
in terms of |appendWith| from Twan van Laarhoven's email. For example,
|appendM = appendWith mappend|.
On Fri, Jan 8, 2010 at 17:57, Felipe Lessa
Of course, you would have to change your 'empty' package to include the following law:
"For every data type implementing Empty and Monoid, empty should be mempty."
"empty" turned out to be a dumb idea -- I had hoped to use it for types which support a NIL value but not appending. Turns out, there's not much point to lists which can't be appended. C'est la vie.
Also, you may want to have CappedList an instance of Control.Functor.Bifunctor from category-extras: [...]
This is probably a good idea, but, I am nervous about making such a small package depend on the huge category-extras and mtl.