main = print
$ foldr (+) 0
$ take 100
$ unfoldr ( \ c -> Just (c, c+1) ) 1
Implementierung (in Prelude, List):
unfoldr :: (b -> Maybe (a,b)) -> b -> [a]
unfoldr f b = case f b of
Nothing -> []
Just (a,b) -> a : unfoldr f b
foldr :: (a -> b -> b) -> b -> [a] -> b
foldr f z [] = z
foldr f z (x : xs) = f x (foldr f z xs)
Funktionen sind Bürger erster Klasse (dürfen lokal definiert werden, Argument und Resultat anderer Funktionen sein)