lean4-htt/tests/lean/1657.lean

33 lines
744 B
Text

abbrev natrec_inner {C} (n: Nat)
(z: Option C) (s: C -> Option C)
: Option C
:= match n with
| 0 => z
| n + 1 => (natrec_inner n z s).bind s
def natrec_int {C} (n: Option Nat) -- ERROR
(z: Option C) (s: C -> Option C)
: Option C
:= n.bind (λn => natrec_inner n z s)
@[inline_if_reduce]
def foo (xs : List Nat) :=
match xs with
| [] => 0
| _::xs => foo xs + 1
def error : Nat := -- ERROR
foo [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
set_option compiler.maxRecInlineIfReduce 32
def ok : Nat :=
foo [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
@[inline]
def foldr (f : Nat → β → β) (acc : β) : Nat → β
| 0 => acc
| n+1 => foldr f (f n acc) n
def toList (r : Nat) : List Nat :=
foldr (· :: ·) [] r