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