fibs1 = [ fib x | x <- [1 ..] ]

fibs2' = 0 : 1 : cont fibs2'
  where
    cont []           = []
    cont (a : b : cs) = a + b : cont (b : cs)

-- or the super simple
fibs2 = 1 : 1 : zipWith (+) fibs2 (tail fibs2)

data Stream a = Cons a (Stream a)

streamToList :: Stream a -> [a]
streamToList (Cons x xs) = x : streamToList xs
