-- Exercise 1 fib :: Integer -> Integer fib 0 = 0 fib 1 = 1 fib n = (fib (n-1)) + (fib (n-2)) fibs1 :: [Integer] fibs1 = map fib [0..] -- Exercise 2 fibs2 :: [Integer] fibs2 = map fst $ iterate (\l -> ( snd l , snd l + fst l )) (0,1) -- Exercise 3 data Stream a = Cons a (Stream a) streamToList :: Stream a -> [a] streamToList (Cons a s) = a : streamToList s instance Show a => Show (Stream a) where show s = show $ take 20 $ streamToList s -- Exercise 4 streamRepeat :: a -> Stream a streamRepeat e = Cons e (streamRepeat e) streamMap :: (a -> b) -> Stream a -> Stream b streamMap f (Cons a as) = Cons (f a) (streamMap f as) streamFromSeed :: (a -> a) -> a -> Stream a streamFromSeed f s = Cons s (streamFromSeed f (f s))