
universe u v

-- set_option pp.binderTypes false
set_option pp.explicit true

namespace x1

def f (x : Bool) (y z : Nat) : Nat :=
match x with
| true => y
| false => z + y + y

end x1


namespace x2

def f (x : Nat) : Nat := x

end x2


namespace x3

def f (x y : Nat) : Nat := x

end x3

namespace x4
@[noinline] def h (x y : Nat) : Nat := x + y

def f1 (x y : Nat) : Nat :=
h x y

def f2 (x y : Nat) : Nat :=
h (h x y) (h y x)

def f3 (x y : Nat) : Nat :=
h (h x x) x

def f4 (x y : Nat) : Nat :=
h (h 1 0) x

def f5 (x y : Nat) : Nat :=
h (h 1 1) x

end x4

namespace x5

partial def myMap {α : Type u} {β : Type v} (f : α → β) : List α → List β
| []      => []
| x::xs   => f x :: myMap f xs

end x5

namespace x6

@[noinline] def act : StateM Nat Unit :=
modify (fun a => a + 1)

def f : StateM Nat Unit :=
act *> act

end x6

namespace x7

inductive S
| v1 | v2 | v3

def foo : S → S × S
| S.v1 => (S.v2, S.v1)
| S.v2 => (S.v3, S.v2)
| S.v3 => (S.v1, S.v2)

end x7

namespace x8

def f (x : Nat) : List Nat :=
x :: x :: []

end x8
