장준영 님의 forall

 
-- 올바른 타입 f :: (forall a. a -> String) -> Int -> String f g n = g (g n) -- 잘못된 타입 f' :: forall a. (a -> String) -> Int -> String f' g n = g (g n)
 
f에서는 g를 부르는 자리에서 a가 결정되고 f'에서는 f'을 부르는 자리에서 a가 결정되죠