Generalised algebraic datatype
General
- A short descriptions on generalised algebraic datatypes here as GHC language features
- Another description with links on Haskell' wiki
Example
An example: it seems to me that genaralised abstract datatypes can provide a nice solution to a problem described in Daan Leijen and Erik Meijer's paper (see PostScript version) on the original HaskellDB page: making typeful (safe) representation of terms of another language (here: SQL). In this example, the problem has been solved in a funny way with Phantom type (we destroy and rebuild, a nice topic for a myth or scifi where a dreamworld is simulated on top of a previously homogenized world to look like the original?), but solving the problem with GADTs seems to be a more direct way (maybe that's why Simple unification-based type inference for GADTs mentions that they are also called as first-class phantom types?)
Related concepts
There are other developed tricks with types in Type, and another way to a more general framework in Dependent types. Epigram tutorial (section 6.1) mentions Haskells GADTs and Epigram's relatedness to Haskell achieved by them.
The more general problem (representing the terms of a language with the terms of another language) can develop surprising things, e.g. quines (self-replicating or self-representing programs) on Combinatory logic.