dhall-1.3.0: Prelude/List/iterate
{-
Generate a list of the specified length given a seed value and transition
function
Examples:
```
./iterate +10 Natural (λ(x : Natural) → x * +2) +1
= [+1, +2, +4, +8, +16, +32, +64, +128, +256, +512] : List Natural
./iterate +0 Natural (λ(x : Natural) → x * +2) +1
= [] : List Natural
```
-}
let iterate : Natural → ∀(a : Type) → (a → a) → a → List a
= λ(n : Natural)
→ λ(a : Type)
→ λ(f : a → a)
→ λ(x : a)
→ List/build
a
( λ(list : Type)
→ λ(cons : a → list → list)
→ List/fold
{ index : Natural, value : {} }
( List/indexed
{}
( List/build
{}
( λ(list : Type)
→ λ(cons : {} → list → list)
→ Natural/fold n list (cons {=})
)
)
)
list
( λ(y : { index : Natural, value : {} })
→ cons (Natural/fold y.index a f x)
)
)
in iterate