如果支持此特性,下述 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)
如果支持此特性,下述 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"))
}