Moonbit 支持 GADT 吗?

如果支持此特性,下述 Scala3 代码可以翻译成 moonbit 吗?

enum Exp[T]:
    case Col[T](name: String) extends Exp[T]
    case Eq[T](left: Exp[T], right: Exp[T]) extends Exp[Boolean]

val col1 = Exp.Col[Int]("a")
val col2 = Exp.Col[Int]("b")
val exp = Exp.Eq(col1, col2)

目前不支持GADT。也许可以用"smart constructor"包一下?


enum Expr[A] {
  Col(String)
  Eq(Expr[Int],Expr[Int])
  If(Expr[Bool], Expr[A], Expr[A])
}

fn equal(a : Expr[Int], b : Expr[Int]) -> Expr[Bool] {
  Eq(a,b)
}

fn ifexpr[A](a : Expr[Bool], ifso : Expr[A], ifnot : Expr[A]) -> Expr[A] {
  If(a, ifso, ifnot)
}

fn col[A](str : String) -> Expr[A] {
  Col(str)
}

fn main {
  let expr = ifexpr(equal(col("a"),col("b")), (col("c") : Expr[Int]), col("d"))
}