March 24th, 2012

with Cat The Cat

Отвечая на заданный вопрос.

http://juick.com/qnikst/1812486

Вкратце, DataD имеет последним параметром список имён, которые подставляются в deriving часть объявления.

Вот цитата объявления Dec:
data Dec 
  = FunD Name [Clause]            -- { f p1 p2 = b where decs }
  | ValD Pat Body [Dec]           -- { p = b where decs }
  | DataD Cxt Name [TyVarBndr] 
         [Con] [Name]             -- { data Cxt x => T x = A x | B (T x)
                                  --       deriving (Z,W)}
Это видно по ссылке Source в описании Language.TH.