GHC8からの機能として、多相的な関数f
に対してf @T
とすることで明示的に型を指定することができるようになりました。
この機能はTypeApplications
という名前で提供されています。
Prelude> :set -XTypeApplications
Prelude> :t show
show :: Show a => a -> String
Prelude> show 3
"3"
Prelude> show @Double 3 -- 型変数 a を明示的に Double に指定している
"3.0"
これでCoqでいう@f T
みたいなことができるようになりました。厳密には両者の機能は全く違いますが。