lean4-htt/tests/playground/ref1.lean
2019-03-16 22:16:28 -07:00

22 lines
647 B
Text

def inc (r : io.ref nat) : io unit :=
do v ← r.read,
r.write (v+1),
io.println (">> " ++ to_string v)
def init_array (r : io.ref (array nat)) (n : nat) : io unit :=
n.mrepeat $ λ i, do
r.modify $ λ a, a.push (2*i)
def show_array_ref (r : io.ref (array nat)) : io unit :=
do a ← r.swap array.nil,
a.size.mrepeat (λ i, io.println ("[" ++ to_string i ++ "]: " ++ to_string (a.read' i))),
r.swap a,
pure ()
def main (xs : list string) : io unit :=
do let n := xs.head.to_nat,
r₁ ← io.mk_ref 0,
n.mrepeat (λ _, inc r₁),
r₂ ← io.mk_ref (array.nil : array nat),
init_array r₂ n,
show_array_ref r₂