간단히 말해서 Monomorphism restriction이라고 가정합니다. Num a => a
과 같은 다형성 유형은 실제 유형을 지정하지 않으면 Integer
처럼 처리됩니다. 아마도이 규칙은 ghci
에서 작동하며 알 수없는 유형 변수 대신 정수 유형을 볼 수 있습니다.
UPD 1 : 실제로이 부분에 포함 된 실제 답변은 defaulting rules입니다.
UPD 2 : 케이스가 Random
유형으로 예상보다 어려워졌습니다. 따라서이 경우 보고서에서 말하는 default (Integer, Double)
선언으로 인해 기본값 규칙이 해결됩니다. 는 단사 사상 제한하지만, 단지 기본 디폴트 규칙이 아닌 함수 선언이없는 한 기술적으로 다음 ghci 세션을
Prelude System.Random> default()
Prelude System.Random> randomIO
<interactive>:6:1:
No instance for (Show (IO a0)) arising from a use of ‘print’
In a stmt of an interactive GHCi command: print it
Prelude System.Random> default (Integer)
Prelude System.Random> randomIO
-7948113563809442883
Prelude System.Random> default (Double)
Prelude System.Random> randomIO
0.41581766590151104
을 고려하십시오. 단일 동질성 제한은 기본 규칙이 함수 정의에 적용되는 방법에 관한 것입니다. – Guvante
나는 링크를 빨리 보았다. "이 제한은 기본적으로 컴파일 된 모듈에서 켜져 있으며 GHCi 프롬프트 (GHC 7.8.1부터)에서 기본적으로 해제되어 있습니다." 그것은 ghci에서 벗어난 것 같습니다. (ghci 7.10.3을 사용하고있었습니다.) –
@AlbertNetymk 예, 위의 설명에서 제한 사항과 기본 규칙이 다른 것으로되어 있습니다. 따라서 제한은 해제되지만 기본 규칙은 계속 적용됩니다. 이 링크를 참조하십시오 : https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ghci.html#type-defaulting-in-ghci – Shersh