Yep, and you would just add that as a constraint for your instance
instance (Show (f (g a))) => Show (FComp f g a) where
show (C f) = "FComp " ++ show f
This just means we have a show instance for FComp
exactly when we have one for f (g a)
You also will need to enable -XFlexibleContexts
for this to work, but I wouldn't worry about this, it's just relaxing the restriction on what GHC allows for contexts and is pretty noncontroversial.