{-# LANGUAGE GADTs, StandaloneDeriving #-} data T a where A :: a -> T () B :: a -> T Bool C :: a -> T Int D :: a -> T Float E :: a -> T Double F :: a -> T (Maybe ()) G :: a -> T (Maybe Bool) deriving instance Eq (T a) deriving instance Ord (T a)