{- |
module: $Header$
description: Infinite stream types
license: MIT
maintainer: Joe Leslie-Hurd <joe@gilith.com>
stability: provisional
portability: portable
-}
module OpenTheory.Stream
where
import qualified OpenTheory.Primitive.Natural as Natural
nth :: [a] -> Natural.Natural -> a
nth s n = if n == 0 then head s else nth (tail s) (n - 1)
naturalTake :: [a] -> Natural.Natural -> [a]
naturalTake s n =
if n == 0 then [] else head s : naturalTake (tail s) (n - 1)
unfold :: (b -> (a, b)) -> b -> [a]
unfold f b = let (a, b') = f b in a : unfold f b'