TypeApplications
型変数に具体的な型を指定できる
例えば、f :: a -> m cのような多相な関数に対する呼び出し時に
code:hs
f @Int @[] @String 100
のように、順番に個々の型引数への指定、続けて引数、という風に指定できる
aがIntになり、mが[]になり、...という風になる
無意味な指定は型エラーになる
f :: Int -> Intという型引数を持たない関数に指定すると、当然エラーになる
code:hs
f :: Int -> Int
f = undefined
result :: Int
result = f @Int 5 -- error
簡潔に型アノテーションを書ける
元のコード
型エラーになる
code:hs
main = do
print $ show . read $ "42"
TypeApplicationsを使って簡潔に型アノテーションを書く
code:hs
{-# LANGUAGE TypeApplications #-} main = do
print $ show @Int . read $ "42"
TypeApplicationsを使わないとしたらこう書かないといけない
code:hs
main = print $ (show :: Int -> String) . read $ "42"
序盤にちょろっとだけ