39 lines
583 B
Text
39 lines
583 B
Text
|
|
|
|
def getVal : IO Nat :=
|
|
IO.rand 0 100
|
|
|
|
-- set_option trace.Elab.definition true
|
|
|
|
def g (i : Nat) : StateT Nat IO Nat := do
|
|
s ← get;
|
|
a ← getVal; -- automatic lift being used
|
|
IO.println a;
|
|
pure (s+a)
|
|
|
|
#eval (g 10).run' 1
|
|
|
|
def h (x : Nat) : IO Nat := do
|
|
IO.println x;
|
|
pure (x+1)
|
|
|
|
def tst1 : IO Unit := do
|
|
let x := ← h $ (← getVal) + (← getVal);
|
|
/-
|
|
Syntax sugar for
|
|
aux1 ← getVal;
|
|
aux2 ← getVal;
|
|
aux3 ← h aux1 aux2;
|
|
let x := aux3;
|
|
-/
|
|
IO.println x
|
|
|
|
#eval tst1
|
|
|
|
def tst2 : IO Unit := do
|
|
if (← h 1) > 0 then
|
|
IO.println "gt"
|
|
else
|
|
IO.println "le"
|
|
|
|
#eval tst2
|