В Scala я могу описать такой ADT:
sealed trait Foo
case class A(a: Int) extends Foo
case class B(b: String) extends Foo
case class C(a: A, b: B) extends Foo
Как я могу сделать то же самое в Haskell?
data Foo = A Int | B String | C A B
Это не работает, потому что A и B не являются типами. Должен ли я использовать расширения GHC, чтобы сделать это?