
On 26/03/2012, at 1:01 AM, TP wrote:
Hello,
My primary problem may be reduced to adding elements of two lists: [1,2,3] + [4,5,6] = [5,7,9]
zipWith (+) [1,2,3] [4,5,6] gets the job done.
However, it seems it is not possible to do that:
------------------- instance Num [Int] where l1 + l2 = .... -------------------
Why?
Because the 'instance' machinery is keyed off the *outermost* type constructor (here []) not the *whole* type (here [Int]) and the reason for that is polymorphism; we want to be able to work with [t] where t is not specially constrained. You *can* do instance (Num t) => Num [t] where ...
It seems it is necessary to do:
------------------ newtype ListOfInt = ListOfInt { getList :: [Int] }
That's *still* a good idea because there are lots of different things that arithmetic on lists might mean. For example, is [1,2] + [3,4,5] an error or not? If it is not an error, what actually happens?