len :: [a] -> Int len [] = 0 len (_:xs) = 1 + len xs sum' :: Num a => [a] -> a sum' [] = 0 sum' (x:xs) = x + sum' xs avrg :: (Real a, Fractional b) => [a] -> b avrg l = realToFrac (sum' l) / fromIntegral (len l) foo :: [Int] foo = [1,2,3,4,5] bar :: [Double] bar = [1,2,3,4,5] main :: IO () main = print (avrg foo, avrg bar)