data Rose a = Rose { key :: a , children :: [ Rose a ] } deriving ( Typeable, Data )
*Main> dataTypeOf $ make 2 DataType {tycon = "Main.Rose", datarep = AlgRep [Rose]} *Main> dataTypeConstrs $ dataTypeOf $ make 2 [Rose] *Main> map constrFields $ dataTypeConstrs $ dataTypeOf $ make 2 [["key","children"]]