Alias of Array.finRange
.
finRange n
is the array of all elements of Fin n
in order.
Equations
Instances For
Alias of List.finRange
.
finRange n
lists all elements of Fin n
in order
Equations
Instances For
Heterogeneous monadic fold over Fin n
from right to left:
Fin.foldrM n f xₙ = do
let xₙ₋₁ : α (n-1) ← f (n-1) xₙ
let xₙ₋₂ : α (n-2) ← f (n-2) xₙ₋₁
...
let x₀ : α 0 ← f 0 x₁
pure x₀
This is the dependent version of Fin.foldrM
.
Equations
- Fin.dfoldrM n α f init = Fin.dfoldrM.loop n α f n ⋯ init
Instances For
Inner loop for Fin.dfoldrM
.
Fin.dfoldrM.loop n f i h xᵢ = do
let xᵢ₋₁ ← f (i-1) xᵢ
...
let x₁ ← f 1 x₂
let x₀ ← f 0 x₁
pure x₀
Equations
- Fin.dfoldrM.loop n α f i_2.succ h_2 x_2 = f ⟨i_2, ⋯⟩ x_2 >>= Fin.dfoldrM.loop n α f i_2 ⋯
- Fin.dfoldrM.loop n α f 0 h_2 x_2 = pure x_2
Instances For
Heterogeneous fold over Fin n
from the right: foldr 3 f x = f 0 (f 1 (f 2 x))
, where
f 2 : α 3 → α 2
, f 1 : α 2 → α 1
, etc.
This is the dependent version of Fin.foldr
.
Equations
- Fin.dfoldr n α f init = Fin.dfoldrM n α f init
Instances For
Heterogeneous monadic fold over Fin n
from left to right:
Fin.foldlM n f x₀ = do
let x₁ : α 1 ← f 0 x₀
let x₂ : α 2 ← f 1 x₁
...
let xₙ : α n ← f (n-1) xₙ₋₁
pure xₙ
This is the dependent version of Fin.foldlM
.
Equations
- Fin.dfoldlM n α f init = Fin.dfoldlM.loop n α f 0 ⋯ init
Instances For
Inner loop for Fin.dfoldlM
.
Fin.foldM.loop n α f i h xᵢ = do
let xᵢ₊₁ : α (i+1) ← f i xᵢ
...
let xₙ : α n ← f (n-1) xₙ₋₁
pure xₙ
Equations
- Fin.dfoldlM.loop n α f i h x = if h' : i < n then f ⟨i, h'⟩ x >>= Fin.dfoldlM.loop n α f (i + 1) ⋯ else cast ⋯ (pure x)
Instances For
Heterogeneous fold over Fin n
from the left: foldl 3 f x = f 0 (f 1 (f 2 x))
, where
f 0 : α 0 → α 1
, f 1 : α 1 → α 2
, etc.
This is the dependent version of Fin.foldl
.
Equations
- Fin.dfoldl n α f init = Fin.dfoldlM n α f init
Instances For
findSome? f
returns f i
for the first i
for which f i
is some _
, or none
if no such
element is found. The function f
is not evaluated on further inputs after the first i
is found.
Instances For
find? p
returns the first i
for which p i = true
, or none
if no such element is found.
The function p
is not evaluated on further inputs after the first i
is found.
Equations
- Fin.find? p = Fin.findSome? (Option.guard fun (i : Fin n) => p i = true)