Scala | 19:07 | Scalaでやってみた。ただのお遊びです。 GADTs型安全なDSLとかを書くのに使えるらしい。 sealed trait Expr[T] case class I(x: Int) extends Expr[Int] case class B(x: Boolean) extends Expr[Boolean] case class Add(lhs: Expr[Int], rhs: Expr[Int]) extends Expr[Int] case class Mul(lhs: Expr[Int], rhs: Expr[Int]) extends Expr[Int] case class Eq(lhs: Expr[Int], rhs: Expr[Int]) extends Expr[Boolean] Mul(Eq(I(123), I(324)), I(456)