@@ -8,27 +8,29 @@ import Strata.DDM.Integration.Lean.OfAstM
88
99namespace Strata
1010
11+
1112/-- Convert Init.Bool inductive to OperationF -/
12- def Bool.toAst {α} [Inhabited α] (v : Ann Bool α ) : OperationF α :=
13- if v.val then
14- ⟨v. ann, q`Init.boolTrue, #[]⟩
13+ def OperationF.ofBool {α} (ann : α) (b : Bool) : OperationF α :=
14+ if b then
15+ { ann := ann, name := q`Init.boolTrue, args := #[] }
1516 else
16- ⟨v. ann, q`Init.boolFalse, #[]⟩
17+ { ann := ann, name := q`Init.boolFalse, args := #[] }
1718
1819/-- Convert OperationF to Init.Bool -/
19- def Bool.ofAst {α} [Inhabited α] [Repr α] (op : OperationF α) : OfAstM (Ann Bool α) :=
20- match op.name with
21- | q`Init.boolTrue =>
22- if op.args.size = 0 then
23- pure ⟨op.ann, true ⟩
24- else
25- .error s! "boolTrue expects 0 arguments, got { op.args.size} "
26- | q`Init.boolFalse =>
27- if op.args.size = 0 then
28- pure ⟨op.ann, false ⟩
29- else
30- .error s! "boolFalse expects 0 arguments, got { op.args.size} "
31- | _ =>
32- .error s! "Unknown Bool operator: { op.name} "
20+ def Bool.ofAst {α} [Inhabited α] [Repr α] (arg : ArgF α) : OfAstM Bool := do
21+ match arg with
22+ | .op op =>
23+ match op.name with
24+ | q`Init.boolTrue =>
25+ if op.args.size ≠ 0 then
26+ .error s! "boolTrue expects 0 arguments, got { op.args.size} "
27+ pure true
28+ | q`Init.boolFalse =>
29+ if op.args.size ≠ 0 then
30+ .error s! "boolFalse expects 0 arguments, got { op.args.size} "
31+ pure false
32+ | _ =>
33+ .error s! "Unknown Bool operator: { op.name} "
34+ | _ => .throwExpected "boolean" arg
3335
3436end Strata
0 commit comments