> Many properties are broken anyway in presence of negative arguments
> 
> drop n . drop m = drop (n+m)          -- try n = -1, m = 1
> take n . drop m = drop m . take (n+m) -- try n = 1, m = -1

But following Simon assumption about collapsing integers to naturals,
you can
have

  collapse n | n<0 = 0
  collapse n = n

and then 

  drop n = drop (collapse n)
  take n = take (collapse n)

so

  drop n . drop m = drop (collapse n) . drop (collapse m) 
                  = drop (collapse n + collapse m)

  take n . drop m = drop m . take (collapse m + n)

I thought I was sure about undefined for n<0, but now I'm not so...
I cannot refute the foldr argument, and the collapse thing fixes any
property you can want.
Fidel.

Reply via email to