1 2 3 4 5 6 7 8
{-# LANGUAGE ImpredicativeTypes #-} {-# LANGUAGE RankNTypes #-} type X = Maybe (forall a. Show a => a) f :: X -> Maybe Int f Nothing = Nothing f (Just x) = Just x