diff --git a/docs/tagged_union_pattern_in_typescript.md b/docs/tagged_union_pattern_in_typescript.md index 59238b9..0ab3a63 100644 --- a/docs/tagged_union_pattern_in_typescript.md +++ b/docs/tagged_union_pattern_in_typescript.md @@ -94,8 +94,10 @@ class Expr { return k.value; case "Add": return k.right.eval() + k.left.eval(); + default: + k satisfies never; // compile time exhaustiveness check + throw new Error("unexhausted"): // run time exhaustiveness check } - k satisfies never; // compile time exhaustiveness check } // ... } @@ -195,13 +197,14 @@ class Expr { const k = this.kind; switch (k.tag) { case "Int": - return; + break; case "Add": k.left.visit(v); k.right.visit(v); - return + break; + default: + k satisfies never; } - k satisfies never; } // ... } diff --git a/src/mir_interpreter.ts b/src/mir_interpreter.ts index 9b5e4ba..54c98ec 100644 --- a/src/mir_interpreter.ts +++ b/src/mir_interpreter.ts @@ -157,8 +157,9 @@ class Val { return `${k.value}`; case "Fn": return `<${k.fn.ty.pretty()}>`; + default: + k satisfies never; } - k satisfies never; } }