Skip to content

Commit

Permalink
Use a shorthand notation for FldFlags
Browse files Browse the repository at this point in the history
  • Loading branch information
chengluyu committed Dec 30, 2023
1 parent 73b389b commit 91925be
Show file tree
Hide file tree
Showing 13 changed files with 34 additions and 25 deletions.
9 changes: 9 additions & 0 deletions shared/src/main/scala/mlscript/helpers.scala
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,15 @@ trait TypeNameImpl extends Ordered[TypeName] { self: TypeName =>
lazy val toVar: Var = Var(name).withLocOf(this)
}

trait FldFlagsImpl extends Located { self: FldFlags =>
def children: Ls[Located] = Nil
override def toString(): String = {
val FldFlags(m, s, g) = this
val res = (if (m) "m" else "") + (if (s) "s" else "") + (if (g) "g" else "")
if (res.isEmpty) "_" else res
}
}

trait FldImpl extends Located { self: Fld =>
def children: Ls[Located] = self.value :: Nil
def describe: Str =
Expand Down
2 changes: 1 addition & 1 deletion shared/src/main/scala/mlscript/syntax.scala
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ final case class IfOpsApp(lhs: Term, opsRhss: Ls[Var -> IfBody]) extends IfBody
final case class IfBlock(lines: Ls[IfBody \/ Statement]) extends IfBody
// final case class IfApp(fun: Term, opsRhss: Ls[Var -> IfBody]) extends IfBody

final case class FldFlags(mut: Bool, spec: Bool, genGetter: Bool)
final case class FldFlags(mut: Bool, spec: Bool, genGetter: Bool) extends FldFlagsImpl
final case class Fld(flags: FldFlags, value: Term) extends FldImpl

object FldFlags { val empty: FldFlags = FldFlags(false, false, false) }
Expand Down
2 changes: 1 addition & 1 deletion shared/src/test/diff/mlscript/Basics.mls
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ def f (x y z) = add x y
//│ ╙── ^^^^^
//│ f: error -> int
//│ Code generation encountered an error:
//│ term App(App(Var(x),Tup(List((None,Fld(FldFlags(false,false,false),Var(y)))))),Tup(List((None,Fld(FldFlags(false,false,false),Var(z)))))) is not a valid pattern
//│ term App(App(Var(x),Tup(List((None,Fld(_,Var(y)))))),Tup(List((None,Fld(_,Var(z)))))) is not a valid pattern

f 1
//│ res: int
Expand Down
4 changes: 2 additions & 2 deletions shared/src/test/diff/mlscript/ByNameByValue.mls
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def incr x = x.a <- x.a + 1
def gensym = let n = { mut a = 0 } in fun () -> (incr n, n)
//│ Parsed: def gensym: let n = {mut a: 0} in () => [incr(n,), n,];
//│ Desugared: def gensym: let n = {mut a: 0} in () => [incr(n,), n,]
//│ AST: Def(false,Var(gensym),Left(Let(false,Var(n),Rcd(List((Var(a),Fld(FldFlags(true,false,false),IntLit(0))))),Lam(Tup(List()),Tup(List((None,Fld(FldFlags(false,false,false),App(Var(incr),Tup(List((None,Fld(FldFlags(false,false,false),Var(n)))))))), (None,Fld(FldFlags(false,false,false),Var(n)))))))),true)
//│ AST: Def(false,Var(gensym),Left(Let(false,Var(n),Rcd(List((Var(a),Fld(m,IntLit(0))))),Lam(Tup(List()),Tup(List((None,Fld(_,App(Var(incr),Tup(List((None,Fld(_,Var(n)))))))), (None,Fld(_,Var(n)))))))),true)
//│ // Query 1
//│ globalThis.gensym = function gensym() {
//│ return (((n) => () => [
Expand All @@ -35,7 +35,7 @@ def gensym = let n = { mut a = 0 } in fun () -> (incr n, n)
gensym1 = let n = { mut a = 0 } in fun () -> (incr n, n)
//│ Parsed: let gensym1 = let n = {mut a: 0} in () => [incr(n,), n,];
//│ Desugared: def gensym1: let n = {mut a: 0} in () => [incr(n,), n,]
//│ AST: Def(false,Var(gensym1),Left(Let(false,Var(n),Rcd(List((Var(a),Fld(FldFlags(true,false,false),IntLit(0))))),Lam(Tup(List()),Tup(List((None,Fld(FldFlags(false,false,false),App(Var(incr),Tup(List((None,Fld(FldFlags(false,false,false),Var(n)))))))), (None,Fld(FldFlags(false,false,false),Var(n)))))))),false)
//│ AST: Def(false,Var(gensym1),Left(Let(false,Var(n),Rcd(List((Var(a),Fld(m,IntLit(0))))),Lam(Tup(List()),Tup(List((None,Fld(_,App(Var(incr),Tup(List((None,Fld(_,Var(n)))))))), (None,Fld(_,Var(n)))))))),false)
//│ // Query 1
//│ globalThis.gensym1 = ((n) => () => [
//│ incr(n),
Expand Down
8 changes: 4 additions & 4 deletions shared/src/test/diff/mlscript/MultiArgs.mls
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,9 @@ f = fun (x, y) -> add x y
f(1, 2)
//│ Parsed: let f = (x, y,) => add(x,)(y,); f(1, 2,);
//│ Desugared: def f: (x, y,) => add(x,)(y,)
//│ AST: Def(false,Var(f),Left(Lam(Tup(List((None,Fld(FldFlags(false,false,false),Var(x))), (None,Fld(FldFlags(false,false,false),Var(y))))),App(App(Var(add),Tup(List((None,Fld(FldFlags(false,false,false),Var(x)))))),Tup(List((None,Fld(FldFlags(false,false,false),Var(y)))))))),false)
//│ AST: Def(false,Var(f),Left(Lam(Tup(List((None,Fld(_,Var(x))), (None,Fld(_,Var(y))))),App(App(Var(add),Tup(List((None,Fld(_,Var(x)))))),Tup(List((None,Fld(_,Var(y)))))))),false)
//│ Desugared: f(1, 2,)
//│ AST: App(Var(f),Tup(List((None,Fld(FldFlags(false,false,false),IntLit(1))), (None,Fld(FldFlags(false,false,false),IntLit(2))))))
//│ AST: App(Var(f),Tup(List((None,Fld(_,IntLit(1))), (None,Fld(_,IntLit(2))))))
//│ f: (int, int,) -> int
//│ = [Function: f]
//│ res: int
Expand Down Expand Up @@ -119,9 +119,9 @@ f = fun ((x, y)) -> add x y
f((1, 2))
//│ Parsed: let f = ('(' [x, y,] ')',) => add(x,)(y,); f('(' [1, 2,] ')',);
//│ Desugared: def f: ('(' [x, y,] ')',) => add(x,)(y,)
//│ AST: Def(false,Var(f),Left(Lam(Tup(List((None,Fld(FldFlags(false,false,false),Bra(false,Tup(List((None,Fld(FldFlags(false,false,false),Var(x))), (None,Fld(FldFlags(false,false,false),Var(y)))))))))),App(App(Var(add),Tup(List((None,Fld(FldFlags(false,false,false),Var(x)))))),Tup(List((None,Fld(FldFlags(false,false,false),Var(y)))))))),false)
//│ AST: Def(false,Var(f),Left(Lam(Tup(List((None,Fld(_,Bra(false,Tup(List((None,Fld(_,Var(x))), (None,Fld(_,Var(y)))))))))),App(App(Var(add),Tup(List((None,Fld(_,Var(x)))))),Tup(List((None,Fld(_,Var(y)))))))),false)
//│ Desugared: f('(' [1, 2,] ')',)
//│ AST: App(Var(f),Tup(List((None,Fld(FldFlags(false,false,false),Bra(false,Tup(List((None,Fld(FldFlags(false,false,false),IntLit(1))), (None,Fld(FldFlags(false,false,false),IntLit(2)))))))))))
//│ AST: App(Var(f),Tup(List((None,Fld(_,Bra(false,Tup(List((None,Fld(_,IntLit(1))), (None,Fld(_,IntLit(2)))))))))))
//│ f: ((int, int,),) -> int
//│ = [Function: f1]
//│ res: int
Expand Down
10 changes: 5 additions & 5 deletions shared/src/test/diff/mlscript/Ops.mls
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@
2 + 2
//│ Parsed: +(2,)(2,);
//│ Desugared: +(2,)(2,)
//│ AST: App(App(Var(+),Tup(List((None,Fld(FldFlags(false,false,false),IntLit(2)))))),Tup(List((None,Fld(FldFlags(false,false,false),IntLit(2))))))
//│ AST: App(App(Var(+),Tup(List((None,Fld(_,IntLit(2)))))),Tup(List((None,Fld(_,IntLit(2))))))
//│ res: int
//│ = 4

:p
1 + 2 * 2 + 3
//│ Parsed: +(+(1,)(*(2,)(2,),),)(3,);
//│ Desugared: +(+(1,)(*(2,)(2,),),)(3,)
//│ AST: App(App(Var(+),Tup(List((None,Fld(FldFlags(false,false,false),App(App(Var(+),Tup(List((None,Fld(FldFlags(false,false,false),IntLit(1)))))),Tup(List((None,Fld(FldFlags(false,false,false),App(App(Var(*),Tup(List((None,Fld(FldFlags(false,false,false),IntLit(2)))))),Tup(List((None,Fld(FldFlags(false,false,false),IntLit(2)))))))))))))))),Tup(List((None,Fld(FldFlags(false,false,false),IntLit(3))))))
//│ AST: App(App(Var(+),Tup(List((None,Fld(_,App(App(Var(+),Tup(List((None,Fld(_,IntLit(1)))))),Tup(List((None,Fld(_,App(App(Var(*),Tup(List((None,Fld(_,IntLit(2)))))),Tup(List((None,Fld(_,IntLit(2)))))))))))))))),Tup(List((None,Fld(_,IntLit(3))))))
//│ res: int
//│ = 8

Expand All @@ -20,7 +20,7 @@
1 + 2 / 2 + 3
//│ Parsed: +(+(1,)(/(2,)(2,),),)(3,);
//│ Desugared: +(+(1,)(/(2,)(2,),),)(3,)
//│ AST: App(App(Var(+),Tup(List((None,Fld(FldFlags(false,false,false),App(App(Var(+),Tup(List((None,Fld(FldFlags(false,false,false),IntLit(1)))))),Tup(List((None,Fld(FldFlags(false,false,false),App(App(Var(/),Tup(List((None,Fld(FldFlags(false,false,false),IntLit(2)))))),Tup(List((None,Fld(FldFlags(false,false,false),IntLit(2)))))))))))))))),Tup(List((None,Fld(FldFlags(false,false,false),IntLit(3))))))
//│ AST: App(App(Var(+),Tup(List((None,Fld(_,App(App(Var(+),Tup(List((None,Fld(_,IntLit(1)))))),Tup(List((None,Fld(_,App(App(Var(/),Tup(List((None,Fld(_,IntLit(2)))))),Tup(List((None,Fld(_,IntLit(2)))))))))))))))),Tup(List((None,Fld(_,IntLit(3))))))
//│ ╔══[ERROR] Type mismatch in operator application:
//│ ║ l.20: 1 + 2 / 2 + 3
//│ ║ ^^^^^^^^^
Expand All @@ -36,7 +36,7 @@
1 |> 2 || 3
//│ Parsed: ||(|>(1,)(2,),)(3,);
//│ Desugared: ||(|>(1,)(2,),)(3,)
//│ AST: App(App(Var(||),Tup(List((None,Fld(FldFlags(false,false,false),App(App(Var(|>),Tup(List((None,Fld(FldFlags(false,false,false),IntLit(1)))))),Tup(List((None,Fld(FldFlags(false,false,false),IntLit(2))))))))))),Tup(List((None,Fld(FldFlags(false,false,false),IntLit(3))))))
//│ AST: App(App(Var(||),Tup(List((None,Fld(_,App(App(Var(|>),Tup(List((None,Fld(_,IntLit(1)))))),Tup(List((None,Fld(_,IntLit(2))))))))))),Tup(List((None,Fld(_,IntLit(3))))))
//│ ╔══[ERROR] identifier not found: |>
//│ ║ l.36: 1 |> 2 || 3
//│ ╙── ^^
Expand All @@ -54,7 +54,7 @@
true || false && true || false
//│ Parsed: ||(||(true,)(&&(false,)(true,),),)(false,);
//│ Desugared: ||(||(true,)(&&(false,)(true,),),)(false,)
//│ AST: App(App(Var(||),Tup(List((None,Fld(FldFlags(false,false,false),App(App(Var(||),Tup(List((None,Fld(FldFlags(false,false,false),Var(true)))))),Tup(List((None,Fld(FldFlags(false,false,false),App(App(Var(&&),Tup(List((None,Fld(FldFlags(false,false,false),Var(false)))))),Tup(List((None,Fld(FldFlags(false,false,false),Var(true)))))))))))))))),Tup(List((None,Fld(FldFlags(false,false,false),Var(false))))))
//│ AST: App(App(Var(||),Tup(List((None,Fld(_,App(App(Var(||),Tup(List((None,Fld(_,Var(true)))))),Tup(List((None,Fld(_,App(App(Var(&&),Tup(List((None,Fld(_,Var(false)))))),Tup(List((None,Fld(_,Var(true)))))))))))))))),Tup(List((None,Fld(_,Var(false))))))
//│ res: bool
//│ = true

Expand Down
2 changes: 1 addition & 1 deletion shared/src/test/diff/nu/AbstractClasses.mls
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ new Foo(1) { fun f = id }
//│ ╙── ^^^^^^^^^^^^^^^^^^^^^^^^^
//│ error
//│ Code generation encountered an error:
//│ cannot generate code for term Rft(App(NuNew(Var(Foo)),Tup(List((None,Fld(FldFlags(false,false,false),IntLit(1)))))),TypingUnit(List(NuFunDef(None,Var(f),None,List(),Left(Var(id))))))
//│ cannot generate code for term Rft(App(NuNew(Var(Foo)),Tup(List((None,Fld(_,IntLit(1)))))),TypingUnit(List(NuFunDef(None,Var(f),None,List(),Left(Var(id))))))


abstract class Bar extends Foo(1)
Expand Down
2 changes: 1 addition & 1 deletion shared/src/test/diff/nu/BadBlocks.mls
Original file line number Diff line number Diff line change
Expand Up @@ -176,5 +176,5 @@ fun test = (new {
//│ ╙── ^
//│ fun test: error
//│ Code generation encountered an error:
//│ Unsupported `new` class term: Bra(true,Rcd(List((Var(res),Fld(FldFlags(false,false,true),Var(res))))))
//│ Unsupported `new` class term: Bra(true,Rcd(List((Var(res),Fld(g,Var(res))))))

2 changes: 1 addition & 1 deletion shared/src/test/diff/nu/LamPatterns.mls
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Some(x) => x
//│ ╙── ^
//│ error -> error
//│ Code generation encountered an error:
//│ term App(Var(Some),Tup(List((None,Fld(FldFlags(false,false,false),Var(x)))))) is not a valid pattern
//│ term App(Var(Some),Tup(List((None,Fld(_,Var(x)))))) is not a valid pattern

:js
// FIXME type
Expand Down
4 changes: 2 additions & 2 deletions shared/src/test/diff/nu/OverrideShorthand.mls
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class Pair(lhs: Int, rhs: Int)
:e
fun f(override Pair(x, y)) = x + y
//│ |#fun| |f|(|#override| |Pair|(|x|,| |y|)|)| |#=| |x| |+| |y|
//│ AST: TypingUnit(List(NuFunDef(None,Var(f),None,List(),Left(Lam(Tup(List((None,Fld(FldFlags(false,false,false),Var(_$0))))),If(IfOpApp(Var(_$0),Var(is),IfThen(App(Var(Pair),Tup(List((None,Fld(FldFlags(false,false,false),Var(x))), (None,Fld(FldFlags(false,false,false),Var(y)))))),App(Var(+),Tup(List((None,Fld(FldFlags(false,false,false),Var(x))), (None,Fld(FldFlags(false,false,false),Var(y)))))))),Some(App(Sel(Super(),Var(f)),Tup(List((None,Fld(FldFlags(false,false,false),Var(_$0)))))))))))))
//│ AST: TypingUnit(List(NuFunDef(None,Var(f),None,List(),Left(Lam(Tup(List((None,Fld(_,Var(_$0))))),If(IfOpApp(Var(_$0),Var(is),IfThen(App(Var(Pair),Tup(List((None,Fld(_,Var(x))), (None,Fld(_,Var(y)))))),App(Var(+),Tup(List((None,Fld(_,Var(x))), (None,Fld(_,Var(y)))))))),Some(App(Sel(Super(),Var(f)),Tup(List((None,Fld(_,Var(_$0)))))))))))))
//│ Parsed: fun f = (_$0,) => if _$0 is (Pair(x, y,)) then +(x, y,) else (super).f(_$0,);
//│ ╔══[ERROR] identifier not found: super
//│ ║ l.11: fun f(override Pair(x, y)) = x + y
Expand Down Expand Up @@ -46,7 +46,7 @@ fun f(override Pair(x, y), z) = x + y
//│ ╙── ^
//│ fun f: (error, anything) -> Int
//│ Code generation encountered an error:
//│ term App(Var(Pair),Tup(List((None,Fld(FldFlags(false,false,false),Var(x))), (None,Fld(FldFlags(false,false,false),Var(y)))))) is not a valid pattern
//│ term App(Var(Pair),Tup(List((None,Fld(_,Var(x))), (None,Fld(_,Var(y)))))) is not a valid pattern


// TODO
Expand Down
6 changes: 3 additions & 3 deletions shared/src/test/diff/nu/RightAssocOps.mls
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ fun (++) conc(xs, ys) = [xs, ys]
:p
1 +: "a" ++ "b" :+ 2
//│ |1| |+:| |"a"| |++| |"b"| |:+| |2|
//│ AST: TypingUnit(List(App(Var(+:),Tup(List((None,Fld(FldFlags(false,false,false),IntLit(1))), (None,Fld(FldFlags(false,false,false),App(Var(:+),Tup(List((None,Fld(FldFlags(false,false,false),App(Var(++),Tup(List((None,Fld(FldFlags(false,false,false),StrLit(a))), (None,Fld(FldFlags(false,false,false),StrLit(b)))))))), (None,Fld(FldFlags(false,false,false),IntLit(2)))))))))))))
//│ AST: TypingUnit(List(App(Var(+:),Tup(List((None,Fld(_,IntLit(1))), (None,Fld(_,App(Var(:+),Tup(List((None,Fld(_,App(Var(++),Tup(List((None,Fld(_,StrLit(a))), (None,Fld(_,StrLit(b)))))))), (None,Fld(_,IntLit(2)))))))))))))
//│ Parsed: +:(1, :+(++("a", "b",), 2,),);
//│ [[Int], [["a", "b"], [Int]]]
//│ res
Expand All @@ -39,7 +39,7 @@ fun (++) conc(xs, ys) = [xs, ys]
:p
1 +: "a" :+ 2 ++ "b"
//│ |1| |+:| |"a"| |:+| |2| |++| |"b"|
//│ AST: TypingUnit(List(App(Var(+:),Tup(List((None,Fld(FldFlags(false,false,false),IntLit(1))), (None,Fld(FldFlags(false,false,false),App(Var(++),Tup(List((None,Fld(FldFlags(false,false,false),App(Var(:+),Tup(List((None,Fld(FldFlags(false,false,false),StrLit(a))), (None,Fld(FldFlags(false,false,false),IntLit(2)))))))), (None,Fld(FldFlags(false,false,false),StrLit(b)))))))))))))
//│ AST: TypingUnit(List(App(Var(+:),Tup(List((None,Fld(_,IntLit(1))), (None,Fld(_,App(Var(++),Tup(List((None,Fld(_,App(Var(:+),Tup(List((None,Fld(_,StrLit(a))), (None,Fld(_,IntLit(2)))))))), (None,Fld(_,StrLit(b)))))))))))))
//│ Parsed: +:(1, ++(:+("a", 2,), "b",),);
//│ [[Int], [["a", [Int]], "b"]]
//│ res
Expand All @@ -49,7 +49,7 @@ fun (++) conc(xs, ys) = [xs, ys]
:e
1 +: "a" ++ 2 +: "b"
//│ |1| |+:| |"a"| |++| |2| |+:| |"b"|
//│ AST: TypingUnit(List(App(Var(+:),Tup(List((None,Fld(FldFlags(false,false,false),IntLit(1))), (None,Fld(FldFlags(false,false,false),App(Var(+:),Tup(List((None,Fld(FldFlags(false,false,false),App(Var(++),Tup(List((None,Fld(FldFlags(false,false,false),StrLit(a))), (None,Fld(FldFlags(false,false,false),IntLit(2)))))))), (None,Fld(FldFlags(false,false,false),StrLit(b)))))))))))))
//│ AST: TypingUnit(List(App(Var(+:),Tup(List((None,Fld(_,IntLit(1))), (None,Fld(_,App(Var(+:),Tup(List((None,Fld(_,App(Var(++),Tup(List((None,Fld(_,StrLit(a))), (None,Fld(_,IntLit(2)))))))), (None,Fld(_,StrLit(b)))))))))))))
//│ Parsed: +:(1, +:(++("a", 2,), "b",),);
//│ ╔══[ERROR] Type mismatch in operator application:
//│ ║ l.50: 1 +: "a" ++ 2 +: "b"
Expand Down
4 changes: 2 additions & 2 deletions shared/src/test/diff/ucs/LeadingAnd.mls
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ fun f(a, b) = if a is Some(av)
and b is Some(bv)
then av + bv
//│ |#fun| |f|(|a|,| |b|)| |#=| |#if| |a| |is| |Some|(|av|)|→|and| |b| |is| |Some|(|bv|)|↵|#then| |av| |+| |bv|←|
//│ AST: TypingUnit(List(NuFunDef(None,Var(f),None,List(),Left(Lam(Tup(List((None,Fld(FldFlags(false,false,false),Var(a))), (None,Fld(FldFlags(false,false,false),Var(b))))),If(IfOpApp(Var(a),Var(is),IfOpsApp(App(Var(Some),Tup(List((None,Fld(FldFlags(false,false,false),Var(av)))))),List((Var(and),IfThen(App(Var(is),Tup(List((None,Fld(FldFlags(false,false,false),Var(b))), (None,Fld(FldFlags(false,false,false),App(Var(Some),Tup(List((None,Fld(FldFlags(false,false,false),Var(bv))))))))))),App(Var(+),Tup(List((None,Fld(FldFlags(false,false,false),Var(av))), (None,Fld(FldFlags(false,false,false),Var(bv))))))))))),None))))))
//│ AST: TypingUnit(List(NuFunDef(None,Var(f),None,List(),Left(Lam(Tup(List((None,Fld(_,Var(a))), (None,Fld(_,Var(b))))),If(IfOpApp(Var(a),Var(is),IfOpsApp(App(Var(Some),Tup(List((None,Fld(_,Var(av)))))),List((Var(and),IfThen(App(Var(is),Tup(List((None,Fld(_,Var(b))), (None,Fld(_,App(Var(Some),Tup(List((None,Fld(_,Var(bv))))))))))),App(Var(+),Tup(List((None,Fld(_,Var(av))), (None,Fld(_,Var(bv))))))))))),None))))))
//│ Parsed: fun f = (a, b,) => if a is Some(av,) ‹· and (is(b, Some(bv,),)) then +(av, bv,)›;
//│ fun f: (Some[Int], Some[Int]) -> Int

Expand All @@ -34,7 +34,7 @@ fun f(a, b) = if a is
and b is Some(bv)
then av + bv
//│ |#fun| |f|(|a|,| |b|)| |#=| |#if| |a| |is|→|Some|(|av|)|→|and| |b| |is| |Some|(|bv|)|↵|#then| |av| |+| |bv|←|←|
//│ AST: TypingUnit(List(NuFunDef(None,Var(f),None,List(),Left(Lam(Tup(List((None,Fld(FldFlags(false,false,false),Var(a))), (None,Fld(FldFlags(false,false,false),Var(b))))),If(IfOpApp(Var(a),Var(is),IfBlock(List(Left(IfOpsApp(App(Var(Some),Tup(List((None,Fld(FldFlags(false,false,false),Var(av)))))),List((Var(and),IfThen(App(Var(is),Tup(List((None,Fld(FldFlags(false,false,false),Var(b))), (None,Fld(FldFlags(false,false,false),App(Var(Some),Tup(List((None,Fld(FldFlags(false,false,false),Var(bv))))))))))),App(Var(+),Tup(List((None,Fld(FldFlags(false,false,false),Var(av))), (None,Fld(FldFlags(false,false,false),Var(bv)))))))))))))),None))))))
//│ AST: TypingUnit(List(NuFunDef(None,Var(f),None,List(),Left(Lam(Tup(List((None,Fld(_,Var(a))), (None,Fld(_,Var(b))))),If(IfOpApp(Var(a),Var(is),IfBlock(List(Left(IfOpsApp(App(Var(Some),Tup(List((None,Fld(_,Var(av)))))),List((Var(and),IfThen(App(Var(is),Tup(List((None,Fld(_,Var(b))), (None,Fld(_,App(Var(Some),Tup(List((None,Fld(_,Var(bv))))))))))),App(Var(+),Tup(List((None,Fld(_,Var(av))), (None,Fld(_,Var(bv)))))))))))))),None))))))
//│ Parsed: fun f = (a, b,) => if a is ‹Some(av,) ‹· and (is(b, Some(bv,),)) then +(av, bv,)››;
//│ ╔══[ERROR] Illegal pattern `and`
//│ ║ l.34: and b is Some(bv)
Expand Down
Loading

0 comments on commit 91925be

Please sign in to comment.