
Philip,
I merge my lists into a list of pairs before I do anything with them so unevenness isn't a problem; I was just trying t convince haskell that I could use nice operators like '+' on my derived type.
There's another way to use nice operators like '+', in cases where the type you're using it with just doesn't make sense as an instance of Class Num. (I think there's an argument that your [(date,value)] type isn't a number and shouldn't be a Num, but I'm not going to go there.) Every module can have its own definition for each name, such as the operator (+). So in your module (eg. module Main, or module DateValueSeries), you can go ahead and define your own (+). The major caveat is making sure you don't conflict with the default (+), which lives in module Prelude, which is normally automatically brought into scope. So you could do this: -- file DateValueSeries.hs module DateValueSeries where import Prelude hiding ((+)) (+) :: [(Int,Int)] -> [(Int,Int)] -> [(Int,Int)] (+) = addSkip addSkip = ... -- file main.hs import Prelude hiding ((+)) import DateValueSeries dvlist1 = [(0,100)] dvlist2 = ... dvlist3 = dvlist1 + dvlist2 The code is incomplete and untested, of course. The basic idea is that you can use (+) for something that isn't exactly addition (although you're choosing that name because it's clearly related to addition). Unlike the examples using Class Num your (+) has nothing to do with the normal (+); it just has the same name. John