module Iterators; syntax iterator for {init := 1; range := 1}; for {A B : Type} (f : A → B → A) (x : A) (y : B) : A := f x y; syntax iterator itconst {init := 2; range := 2}; itconst : {A B C : Type} → (A → A → B → C → A) → A → A → B → C → A | f := f; builtin bool type Bool := | true : Bool | false : Bool; main : Bool := let z : Bool := false; in itconst (a := true; b := false) (c in false; d in false) { for (x := true) (y in false) { case x of | true := y | false := z } };