(* some examples *) open Tcore let a = App(Abs("a",IntT,iadd(Int 1,Var "a")),Int 17) let b = eIf(ieql(Int 1, Int 2), Int 7, a) let c = Abs("v",RecordT[(fst_label,SumT[("p",IntT);("q",tBoolT)]); (snd_label,IntT)], Switch(Select(fst_label,Var "v"), [("p",Abs("x",IntT,Variant(fst_label,Var "x"))); ("q",Abs("y",tBoolT,Variant(snd_label,Var "y")))])) let d = Fix(["fact", Abs("x",IntT,eIf(ieql(Var "x",Int 0),Int 1,imul(Var "x",App(Var "fact", iadd(Var "x",Int (-1)))))), IntT], App(Var "fact",Int 6)) let d1 = Fix([("fact1", Abs("x",IntT,eIf(ieql(Var "x",Int 0),Int 1,imul(Var "x",App(Var "fact2", iadd(Var "x",Int (-1)))))), IntT); ("fact2", Abs("x",IntT,eIf(ieql(Var "x",Int 0),Int 1,imul(Var "x",App(Var "fact1", iadd(Var "x",Int (-1)))))), IntT)], App(Var "fact1",Int 6)) let e = Select("a", eIf(eFalse, Record[("a",Int 1);("b",eFalse)], Record[("a",Int 2);("b",Int 3)])) let ex1 = Abs("z",IntT, eLet("x",IntT,eLet("y",IntT,Var "z", Var "y"), Var "x")) let ex2 = Abs("z",IntT, eLet("x",IntT,Fix(["f",Abs("y",IntT,App(Var "f",Var "y")),IntT], App(Var "f",Var "z")), Var "x")) let ex3 = Abs("z",tBoolT, eLet("x",IntT,eIf(Var "z", Int 1, Int 2), Record[("a",Var "x");("b",Int 3)]))