module FourierSeries where

evalL :: Floating a => [(a,a)] -> a -> a
evalL [] _ = 0
evalL ((c,_):cs) t =
   c/2 + sum (zipWith (\(r,i) tk -> r * cos tk + i * sin tk)
                      cs (iterate (t+) t))

evalSineL, evalCosineL :: Floating a => [a] -> a -> a
evalSineL       [] _ = 0
evalSineL   (_:cs) t =
         sum (zipWith (*) cs (map sin (iterate (t+) t)))
evalCosineL     [] _ = 0
evalCosineL (c:cs) t =
   c/2 + sum (zipWith (*) cs (map cos (iterate (t+) t)))