EN
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

repeat x est x, x, x, ….

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, ….

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

Indice direct s[i].

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.