haskell-cafe@haskell.org
[Top] [All Lists]

Re: [Haskell-cafe] instance Monad m => Functor m

Subject: Re: [Haskell-cafe] instance Monad m => Functor m
From: Henning Thielemann
Date: Wed, 09 Apr 2008 17:49:09 +0200 CEST

On Wed, 9 Apr 2008, Hans Aberg wrote:

On 9 Apr 2008, at 16:26, Henning Thielemann wrote:
1. elementwise multiplication
2. convolution

and you have some function which invokes the ring multiplication

f :: Ring a => a -> a

and a concrete sequence

x :: Sequence Integer

what multiplication (elementwise or convolution) shall be used for computing (f x) ?

In math, if there is a theorem about a ring, and one wants to apply it to an object which more than one ring structure, one needs to indicate which ring to use. So if I translate, then one might get something like
class Ring (a; o, e, add, mult) ...
...
class Ring(a; o, e, add, (*)) => Sequence.mult a
      Ring(a; o, e, add, (**) => Sequence.conv a
where ...
Then Sequence.mult and Sequence.conv will be treated as different types whenever there is a clash using Sequence only. - I am not sure how this fits into Haskell syntax though.

Additionally I see the problem, that we put more interpretation into standard symbols by convention. Programming is not only about the most general formulation of an algorithm but also about error detection. E.g. you cannot compare complex numbers in a natural way, that is
  x < (y :: Complex Rational)
is probably a programming error. However, some people might be happy if (<) is defined by lexicgraphic ordering. This way complex numbers can be used as keys in a Data.Map. But then accidental uses of (<) could no longer be detected. (Thus I voted for a different class for keys to be used in Data.Map, Data.Set et.al.) Also (2*5 == 7) would surprise people, if (*) is the symbol for a general group operation, and we want to use it for the additive group of integers.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@xxxxxxxxxxx
http://www.haskell.org/mailman/listinfo/haskell-cafe

<Prev in Thread] Current Thread [Next in Thread>