{-# LANGUAGE RankNTypes, DataKinds, TypeFamilies #-} module FunArgs where f :: forall a. Ord a => Int -- ^ First argument -> a -- ^ Second argument -> Bool -- ^ Third argument -> (a -> a) -- ^ Fourth argument -> () -- ^ Result f = undefined g :: a -- ^ First argument -> b -- ^ Second argument -> c -- ^ Third argument -> d -- ^ Result g = undefined h :: forall a b c . a -- ^ First argument -> b -- ^ Second argument -> c -- ^ Third argument -> forall d. d -- ^ Result h = undefined i :: forall a (b :: ()) d. (d ~ '()) => forall c . a b c d -- ^ abcd -> () -- ^ Result i = undefined j :: forall proxy (a :: ()) b . proxy a -- ^ First argument -> b -- ^ Result j = undefined