generated at
TypeApplications
型変数に具体的な型を指定できる
例えば、 f :: a -> m c のような多相な関数に対する呼び出し時に
hs
f @Int @[] @String 100
のように、順番に個々の型引数への指定、続けて引数、という風に指定できる
a Int になり、 m [] になり、...という風になる



無意味な指定は型エラーになる
f :: Int -> Int という型引数を持たない関数に指定すると、当然エラーになる
hs
f :: Int -> Int f = undefined result :: Int result = f @Int 5 -- error









型の推論ができずにampbiguous type variable errorになってしまうときに、
簡潔に型アノテーションを書ける

元のコード
型エラーになる
hs
main = do print $ map read ["33", "4"] print $ show . read $ "42"
TypeApplicationsを使って簡潔に型アノテーションを書く
hs
{-# LANGUAGE TypeApplications #-} main = do print $ map (read @Int) ["33", "4"] print $ show @Int . read $ "42"
TypeApplicationsを使わないとしたらこう書かないといけない
hs
main = print $ (show :: Int -> String) . read $ "42"




序盤にちょろっとだけ