This is one of the shortcomings of haskell not to mention other programming languages. Mathemathicist would find it very annoying. Instead of instance Monoid Integer where mappend = (+) mempty = 0 instance Monoid Integer where mappend = (*) mempty = 1 which is not legal and the workaround Num a => Monoid (Sum a) Num a => Monoid (Product a) wich is cumbersome A mathematician would say something like: instance Monoid Integer with operation + where mappend = (+) mempty = 0 and instance Monoid Integer with operation * where mappend = (*) mempty = 1 But talking about shortcomings, personally I prefer to implement first a form of assertion that permits the checking of the class properties automatically for each new instance. This is far more important in práctical terms. 2009/1/19 Thomas DuBuisson <thomas.dubuisson@gmail.com>
2009/1/19 Luke Palmer <lrpalmer@gmail.com>:
On Mon, Jan 19, 2009 at 3:58 AM, Patai Gergely < patai_gergely@fastmail.fm> wrote:
However, there are other type classes that are too general to assign such concrete uses to. For instance, if a data structure can have more than one meaningful (and useful) Functor or Monoid instance,
As a side curiosity, I would love to see an example of any data structure which has more than one Functor instance. Especially those which have more than one useful functor instance. Luke
The recent, and great, blog post about moniods [1] discusses the fact that (Num a) could be one of several different monoids and how that was handled.
[1] http://sigfpe.blogspot.com/2009/01/haskell-monoids-and-their-uses.html _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe