{-# LANGUAGE GADTSyntax #-} {-# LANGUAGE TypeFamilies #-} data instance Foo Int = FooInt Int data instance Foo [Int] = IntListFoo ( Int , Int ) ( Double , Double ) data instance Bar Double a = DoubleBar Double (Bar a)