Generalized Algebraic Data Types in Scala Basic GADTs Here's an ADT which is not a GADT, in Haskell: data Expr = IntExpr Int | BoolExpr Bool