多相関数
parametric polymorphic function
generic function
多相型を持つ関数
普通のHaskellの任意の型は関数全体にforallが暗黙的に付いている
code:hs
length :: a -> Int -- これは
length :: forall a. a -> Int -- これと同じ意味
高階関数で多相関数を使う場合は、RankNTypesGHC拡張を使えばできる
code:hs
{-# LANGUAGE RankNTypes #-}
-- foo' :: forall a. (a -> Int) -> Int 何も書いてなければこう解釈される
foo' :: (forall a. a -> Int) -> Int
foo' f = f 1,2,3 + f "string"
forallのつける位置を変えている
参考
http://jats-ug.metasepi.org/doc/ATS2/INT2PROGINATS/x1170.html