forall
が暗黙的に付いているhslength :: [a] -> Int -- これは
length :: forall a. [a] -> Int -- これと同じ意味
hs{-# LANGUAGE RankNTypes #-}
-- foo' :: forall a. ([a] -> Int) -> Int 何も書いてなければこう解釈される
foo' :: (forall a. [a] -> Int) -> Int
foo' f = f [1,2,3] + f "string"
forall
のつける位置を変えている