明示的に型を指定するVisible Type Application
GHC 8.0からVisible Type Application
が導入されました。
今までは::
で型を明示的に指定していました。
Prelude> Prelude> let x = return 1 Prelude> :t x x :: (Num a, Monad m) => m a Prelude> let x = return 1 :: Maybe Int Prelude> :t x x :: Maybe Int Prelude> let x = return 1 :: Maybe Float Prelude> :t x x :: Maybe Float Prelude>
TypeApplications
を使うと@Type
で型を指定することができるようになります。
Prelude> Prelude> :set -XTypeApplications Prelude> let x = return @Maybe 1 Prelude> :t x x :: Num a => Maybe a Prelude>
使い方としては、ポリモーフィックな関数があったとして、それに対して型を限定した使い方をさせたい時に使うのかもしれません。
Prelude> :t map map :: (a -> b) -> [a] -> [b] Prelude> :t map @Int @Char map @Int @Char :: (Int -> Char) -> [Int] -> [Char]