generated at
rank-1 type
関数の型にparameterを含む関数
雑に言えば、普通のHaskellで扱える多相関数

ちゃんというと (?)
rank-0 typeな関数をfirst class objectとして扱う関数
これでは説明しきれていない #??
foo :: (a -> a) -> a -> a がrank-1であることは、「rank-0 typeを引数に取る」で説明がつく
しかしそれだけだと id :: a -> a がrank-1であることの説明がつかない

purs(hs)
length :: ∀ a. [a] -> Int id :: ∀ a. a -> a foo :: ∀ a. (a -> a) -> a -> a hoge :: ∀ a. Int -> a -- 実用的なものかは知らないけど、定義的にはコレも入るはず


forall a は全体にかかる
hs
foo :: forall a . ([a] -> Int) -> Int foo :: forall a . (([a] -> Int) -> Int)  -- 敢えて括弧を付けるなら
関数全体が forall で囲われている
2つある場合も同様
hs
fst :: forall a. forall b. (a,b) -> a fst :: forall a b. (a,b) -> a