GADTs + extensible kinds = dependent programming (2005)

by Tim Sheard, James Hook, Nathan Linger