some :: Num n => n -> n
= x + x
some x
> :set -XTypeApplications
> some @Int 1
2
> some @Double 1
2.0
some
함수가 n
컨텍스트에 있는데, n
을 임시로 특정 타입 컨텍스트로 실행하고 싶을 때
@
를 붙여, 폴리모픽 함수를 특정 컨텍스트에서 실행할 수 있습니다.
2021.5.8
타입 서명을 명시적으로 써줄 때와 차이를 보입니다.
Prelude> :set -XTypeApplications
Prelude> some x = x + x
Prelude> some @Int 1
<interactive>:5:1: error:
Cannot apply expression of type ‘a0 -> a0’
• type argument ‘Int’
to a visible In the expression: some @Int 1
• In an equation for ‘it’: it = some @Int 1
Prelude> :t some
some :: Num a => a -> a
Prelude> :{
Prelude| some :: Num n => n -> n
Prelude| some x = x + x
Prelude| :}
Prelude> some @Int 1
2
Prelude> :t some
some :: Num n => n -> n
Why doesn’t GHCi allow type arguments for this version of join? - stackoverflow
왜!그런지는 모르지만, TypeApplication
은 명시적으로 타입 서명을 적어 준 정의에 대해서만 동작한다고 합니다. 관련 이유를 알아내려면 또 논문을 한가득 읽어야 되나 봅니다. 애플리케이션 제작에 필요한 것부터 익히기 위해 이 것 또한 지금은 넘어가야 할 것 같습니다.