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? _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe