
On Mon, 2009-01-19 at 21:18 +0100, Alberto G. Corona wrote:
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
Check out the OBJ family of languages, particularly OBJ3 and (I think) Maude.
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
2009/1/19 Luke Palmer : > On Mon, Jan 19, 2009 at 3:58 AM, Patai Gergely
> 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
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe