importPour l'utiliser : import Data.Stream
Stream — suites toujours infinies
Synopsis
data Stream a
= a :: Lazy (Stream a)
Une suite infinie : chaque Stream a un premier élément et un reste (paresseux, mémoïsé) — il n'y a pas de cas vide. Elle partage l'opérateur cons :: avec List et LazyList (résolu par le type), mais l'absence de Nil rend head et tail totales — un Stream n'est jamais vide.
Importez-la qualifiée, p. ex. import Data.Stream as S, et écrivez S.head, S.take, … pour que ces noms ne masquent pas les versions de List.
::
une tête devant une queue paresseuse infinie (pas de Nil : head/tail totales)
repeat : a -> Stream a
iterate : (a -> a) -> a -> Stream a
iterate f x est x, f x, f (f x), ….
from : Int -> Stream Int
Les entiers à partir de from n : n, n+1, n+2, ….
head : Stream a -> a
Le premier élément. Total — un Stream en a toujours un.
tail : Stream a -> Stream a
Tout ce qui suit le premier élément. Total.
at : Nat -> Stream a -> a
at n s est le n-ième élément (à partir de 0). n : Nat.
(!) : Stream a -> Nat -> Maybe a
Indice sûr s[i]? — toujours Just (un flux est infini).
index : Stream a -> Nat -> a
take : Nat -> Stream a -> List a
take n s est les n premiers éléments, en List stricte.
drop : Nat -> Stream a -> Stream a
drop n s écarte les n premiers éléments.
map : (a -> b) -> Stream a -> Stream b
Applique f à chaque élément, paresseusement.
zipWith : (a -> b -> c) -> Stream a -> Stream b -> Stream c
Combine deux suites deux à deux.