{-# LANGUAGE TypeFamilies #-} data F1 = F1 data F2 = F2 data F3 = F3 data G = G1 | G2 | G3 deriving (Show) type family Convert a :: * where Convert F1 = G Convert F2 = G Convert F3 = G class Convertable a where convert :: a -> G instance Convertable F1 where convert F1 = G1 instance Convertable F2 where convert F2 = G2 instance Convertable F3 where convert F3 = G3