inductive LazyList: Type u → Type u
LazyList (α : Type u) where
| nil: {α : Type u} → LazyList α
nil : LazyList: Type u → Type u
LazyList α
| cons: {α : Type u} → α → LazyList α → LazyList α
cons (hd : α) (tl : LazyList: Type u → Type u
LazyList α) : LazyList: Type u → Type u
LazyList α
| delayed: {α : Type u} → Thunk (LazyList α) → LazyList α
delayed (t : Thunk $ LazyList: Type u → Type u
LazyList α) : LazyList: Type u → Type u
LazyList α
def List.toLazy: {α : Type u} → List α → LazyList α
List.toLazy {α : Type u} : List α → LazyList: Type u → Type u
LazyList α
| [] => LazyList.nil: {α : Type u} → LazyList α
LazyList.nil
| h::t => LazyList.cons: {α : Type u} → α → LazyList α → LazyList α
LazyList.cons h (toLazy: {α : Type u} → List α → LazyList α
toLazy t)
namespace LazyList
variable {α : Type u} {β : Type v} {δ : Type w}
instance: {α : Type u} → Inhabited (LazyList α)
instance : Inhabited: Type u → Type u
Inhabited (LazyList: Type u → Type u
LazyList α) :=
⟨nil: {α : Type u} → LazyList α
nil⟩
@[inline] def pure : α → LazyList: Type u → Type u
LazyList α
| a => cons: {α : Type u} → α → LazyList α → LazyList α
cons a nil: {α : Type u} → LazyList α
nil
partial def isEmpty: LazyList α → Bool
isEmpty : LazyList: Type u → Type u
LazyList α → Bool
| nil: {α : Type ?u.1027} → LazyList α
nil => true
| cons: {α : Type ?u.1036} → α → LazyList α → LazyList α
cons _ _ => false
| delayed: {α : Type ?u.1058} → Thunk (LazyList α) → LazyList α
delayed as => isEmpty: LazyList α → Bool
isEmpty as.get: {α : Type u} → Thunk α → α
get
partial def toList: LazyList α → List α
toList : LazyList: Type u → Type u
LazyList α → List α
| nil: {α : Type ?u.1187} → LazyList α
nil => []
| cons: {α : Type ?u.1199} → α → LazyList α → LazyList α
cons a as => a :: toList: LazyList α → List α
toList as
| delayed: {α : Type ?u.1221} → Thunk (LazyList α) → LazyList α
delayed as => toList: LazyList α → List α
toList as.get: {α : Type u} → Thunk α → α
get
partial def head: {α : Type u} → [inst : Inhabited α] → LazyList α → α
head [Inhabited: Type u → Type u
Inhabited α] : LazyList: Type u → Type u
LazyList α → α
| nil: {α : Type ?u.1357} → LazyList α
nil => default: {α : Type u} → [self : Inhabited α] → α
default
| cons: {α : Type ?u.1373} → α → LazyList α → LazyList α
cons a Warning: unused variable `as`
=> a
| delayed: {α : Type ?u.1393} → Thunk (LazyList α) → LazyList α
delayed as => head: [inst : Inhabited α] → LazyList α → α
head as.get: {α : Type u} → Thunk α → α
get
partial def tail: {α : Type u} → LazyList α → LazyList α
tail : LazyList: Type u → Type u
LazyList α → LazyList: Type u → Type u
LazyList α
| nil: {α : Type ?u.1530} → LazyList α
nil => nil: {α : Type u} → LazyList α
nil
| cons: {α : Type ?u.1541} → α → LazyList α → LazyList α
cons Warning: unused variable `a`
as => as
| delayed: {α : Type ?u.1561} → Thunk (LazyList α) → LazyList α
delayed as => tail: LazyList α → LazyList α
tail as.get: {α : Type u} → Thunk α → α
get
partial def append: {α : Type u} → LazyList α → (Unit → LazyList α) → LazyList α
append : LazyList: Type u → Type u
LazyList α → (Unit → LazyList: Type u → Type u
LazyList α) → LazyList: Type u → Type u
LazyList α
| nil: {α : Type ?u.1704} → LazyList α
nil, bs => bs ()
| cons: {α : Type ?u.1723} → α → LazyList α → LazyList α
cons a as, bs => delayed: {α : Type u} → Thunk (LazyList α) → LazyList α
delayed (cons: {α : Type u} → α → LazyList α → LazyList α
cons a (append: LazyList α → (Unit → LazyList α) → LazyList α
append as bs))
| delayed: {α : Type ?u.1783} → Thunk (LazyList α) → LazyList α
delayed as, bs => delayed: {α : Type u} → Thunk (LazyList α) → LazyList α
delayed (append: LazyList α → (Unit → LazyList α) → LazyList α
append as.get: {α : Type u} → Thunk α → α
get bs)
instance: {α : Type u} → Append (LazyList α)
instance : Append (LazyList: Type u → Type u
LazyList α) where
append a b := LazyList.append: {α : Type u} → LazyList α → (Unit → LazyList α) → LazyList α
LazyList.append a (fun _ => b)
partial def interleave: LazyList α → LazyList α → LazyList α
interleave : LazyList: Type u → Type u
LazyList α → LazyList: Type u → Type u
LazyList α → LazyList: Type u → Type u
LazyList α
| nil: {α : Type ?u.2013} → LazyList α
nil, bs => bs
| cons: {α : Type ?u.2031} → α → LazyList α → LazyList α
cons a as, bs => delayed: {α : Type u} → Thunk (LazyList α) → LazyList α
delayed (cons: {α : Type u} → α → LazyList α → LazyList α
cons a (interleave: LazyList α → LazyList α → LazyList α
interleave bs as))
| delayed: {α : Type ?u.2089} → Thunk (LazyList α) → LazyList α
delayed as, bs => delayed: {α : Type u} → Thunk (LazyList α) → LazyList α
delayed (interleave: LazyList α → LazyList α → LazyList α
interleave as.get: {α : Type u} → Thunk α → α
get bs)
partial def map: (α → β) → LazyList α → LazyList β
map (f : α → β) : LazyList: Type u → Type u
LazyList α → LazyList: Type v → Type v
LazyList β
| nil: {α : Type ?u.2270} → LazyList α
nil => nil: {α : Type v} → LazyList α
nil
| cons: {α : Type ?u.2282} → α → LazyList α → LazyList α
cons a as => delayed: {α : Type v} → Thunk (LazyList α) → LazyList α
delayed (cons: {α : Type v} → α → LazyList α → LazyList α
cons (f a) (map: (α → β) → LazyList α → LazyList β
map f as))
| delayed: {α : Type ?u.2332} → Thunk (LazyList α) → LazyList α
delayed as => delayed: {α : Type v} → Thunk (LazyList α) → LazyList α
delayed (map: (α → β) → LazyList α → LazyList β
map f as.get: {α : Type u} → Thunk α → α
get)
partial def map₂: (α → β → δ) → LazyList α → LazyList β → LazyList δ
map₂ (f : α → β → δ) : LazyList: Type u → Type u
LazyList α → LazyList: Type v → Type v
LazyList β → LazyList: Type w → Type w
LazyList δ
| nil: {α : Type ?u.2498} → LazyList α
nil, _ => nil: {α : Type w} → LazyList α
nil
| _, nil: {α : Type ?u.2518} → LazyList α
nil => nil: {α : Type w} → LazyList α
nil
| cons: {α : Type ?u.2536} → α → LazyList α → LazyList α
cons a as, cons: {α : Type ?u.2540} → α → LazyList α → LazyList α
cons b bs => delayed: {α : Type w} → Thunk (LazyList α) → LazyList α
delayed (cons: {α : Type w} → α → LazyList α → LazyList α
cons (f a b) (map₂: (α → β → δ) → LazyList α → LazyList β → LazyList δ
map₂ f as bs))
| delayed: {α : Type ?u.2607} → Thunk (LazyList α) → LazyList α
delayed as, bs => delayed: {α : Type w} → Thunk (LazyList α) → LazyList α
delayed (map₂: (α → β → δ) → LazyList α → LazyList β → LazyList δ
map₂ f as.get: {α : Type u} → Thunk α → α
get bs)
| as, delayed: {α : Type ?u.2644} → Thunk (LazyList α) → LazyList α
delayed bs => delayed: {α : Type w} → Thunk (LazyList α) → LazyList α
delayed (map₂: (α → β → δ) → LazyList α → LazyList β → LazyList δ
map₂ f as bs.get: {α : Type v} → Thunk α → α
get)
@[inline] def zip: LazyList α → LazyList β → LazyList (α × β)
zip : LazyList: Type u → Type u
LazyList α → LazyList: Type v → Type v
LazyList β → LazyList: Type (max v u) → Type (max v u)
LazyList (α × β) :=
map₂: {α : Type u} → {β : Type v} → {δ : Type (max u v)} → (α → β → δ) → LazyList α → LazyList β → LazyList δ
map₂ Prod.mk: {α : Type u} → {β : Type v} → α → β → α × β
Prod.mk
partial def join: LazyList (LazyList α) → LazyList α
join : LazyList: Type u → Type u
LazyList (LazyList: Type u → Type u
LazyList α) → LazyList: Type u → Type u
LazyList α
| nil: {α : Type ?u.3036} → LazyList α
nil => nil: {α : Type u} → LazyList α
nil
| cons: {α : Type ?u.3047} → α → LazyList α → LazyList α
cons a as: LazyList (LazyList α)
as => delayed: {α : Type u} → Thunk (LazyList α) → LazyList α
delayed (append: {α : Type u} → LazyList α → (Unit → LazyList α) → LazyList α
append a fun _ => join: LazyList (LazyList α) → LazyList α
join as: LazyList (LazyList α)
as)
| delayed: {α : Type ?u.3102} → Thunk (LazyList α) → LazyList α
delayed as: Thunk (LazyList (LazyList α))
as => delayed: {α : Type u} → Thunk (LazyList α) → LazyList α
delayed (join: LazyList (LazyList α) → LazyList α
join as: Thunk (LazyList (LazyList α))
as.get: {α : Type u} → Thunk α → α
get)
@[inline] partial def bind: {α : Type u} → {β : Type v} → LazyList α → (α → LazyList β) → LazyList β
bind (x : LazyList: Type u → Type u
LazyList α) (f : α → LazyList: Type v → Type v
LazyList β) : LazyList: Type v → Type v
LazyList β :=
join: {α : Type v} → LazyList (LazyList α) → LazyList α
join (x.map: {α : Type u} → {β : Type v} → (α → β) → LazyList α → LazyList β
map f)
instance : Monad: (Type u_1 → Type u_1) → Type (u_1 + 1)
Monad LazyList: Type u_1 → Type u_1
LazyList where
pure := LazyList.pure: {α : Type u_1} → α → LazyList α
LazyList.pure
bind := LazyList.bind: {α β : Type u_1} → LazyList α → (α → LazyList β) → LazyList β
LazyList.bind
map := LazyList.map: {α β : Type u_1} → (α → β) → LazyList α → LazyList β
LazyList.map
instance: Alternative LazyList
instance : Alternative: (Type u_1 → Type u_1) → Type (u_1 + 1)
Alternative LazyList: Type u_1 → Type u_1
LazyList where
failure := nil: {α : Type u_1} → LazyList α
nil
orElse := LazyList.append: {α : Type u_1} → LazyList α → (Unit → LazyList α) → LazyList α
LazyList.append
partial def approx: Nat → LazyList α → List α
approx : Nat → LazyList: Type u → Type u
LazyList α → List α
| 0, Warning: unused variable `as`
=> []
| _, nil: {α : Type ?u.3731} → LazyList α
nil => []
| i+1, cons: {α : Type ?u.3749} → α → LazyList α → LazyList α
cons a as => a :: approx: Nat → LazyList α → List α
approx i as
| i+1, delayed: {α : Type ?u.3839} → Thunk (LazyList α) → LazyList α
delayed as => approx: Nat → LazyList α → List α
approx (i+1) as.get: {α : Type u} → Thunk α → α
get
partial def iterate: (α → α) → α → LazyList α
iterate (f : α → α) : α → LazyList: Type u → Type u
LazyList α
| x => cons: {α : Type u} → α → LazyList α → LazyList α
cons x (delayed: {α : Type u} → Thunk (LazyList α) → LazyList α
delayed (iterate: (α → α) → α → LazyList α
iterate f (f x)))
partial def iterate₂: (α → α → α) → α → α → LazyList α
iterate₂ (f : α → α → α) : α → α → LazyList: Type u → Type u
LazyList α
| x, y => cons: {α : Type u} → α → LazyList α → LazyList α
cons x (delayed: {α : Type u} → Thunk (LazyList α) → LazyList α
delayed (iterate₂: (α → α → α) → α → α → LazyList α
iterate₂ f y (f x y)))
partial def filter: (α → Bool) → LazyList α → LazyList α
filter (p : α → Bool) : LazyList: Type u → Type u
LazyList α → LazyList: Type u → Type u
LazyList α
| nil: {α : Type ?u.4392} → LazyList α
nil => nil: {α : Type u} → LazyList α
nil
| cons: {α : Type ?u.4403} → α → LazyList α → LazyList α
cons a as => delayed: {α : Type u} → Thunk (LazyList α) → LazyList α
delayed (if p a then cons: {α : Type u} → α → LazyList α → LazyList α
cons a (filter: (α → Bool) → LazyList α → LazyList α
filter p as) else filter: (α → Bool) → LazyList α → LazyList α
filter p as)
| delayed: {α : Type ?u.4545} → Thunk (LazyList α) → LazyList α
delayed as => delayed: {α : Type u} → Thunk (LazyList α) → LazyList α
delayed (filter: (α → Bool) → LazyList α → LazyList α
filter p as.get: {α : Type u} → Thunk α → α
get)
end LazyList