{-# LANGUAGE DeriveTraversable #-} -- Ensure that we can derive Functor, Foldable, and Traversable using only -- an import of Data.Singletons.TH module FunctorLikeDeriving where import Data.Kind import Data.Singletons.TH $(singletons [d| data T x a = MkT1 x a (Maybe a) (Maybe (Maybe a)) | MkT2 (Maybe x) deriving (Functor, Foldable, Traversable) data Empty (a :: Type) deriving (Functor, Foldable, Traversable) |])