default (Integer,Rational,Double) infixr 9 # series f = f : repeat 0 instance (Num a, Eq a) => Num [a] where fromInteger c = series(fromInteger c) negate (f:ft) = -f : -ft (f:ft) + (g:gt) = f+g : ft+gt (f:ft) * gs@(g:gt) = f*g : ft*gs + series(f)*gt instance (Fractional a, Eq a) => Fractional [a] where (f:ft) / (g:gt) = qs where qs = f/g : series(1/g)*(ft-qs*gt) (f:ft) # gs@(0:gt) = f : gt*(ft#gs) revert (0:ft) = rs where rs = 0 : 1/(ft#rs) int fs = 0 : zipWith (/) fs [1..] diff (_:ft) = zipWith (*) ft [1..] tans = revert(int(1/(1:0:1))) sins = int coss coss = 1 - int sins