2016-08-31 4 views

답변

0

간단히 말해서 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 
+3

을 고려하십시오. 단일 동질성 제한은 기본 규칙이 함수 정의에 적용되는 방법에 관한 것입니다. – Guvante

+0

나는 링크를 빨리 보았다. "이 제한은 기본적으로 컴파일 된 모듈에서 켜져 있으며 GHCi 프롬프트 (GHC 7.8.1부터)에서 기본적으로 해제되어 있습니다." 그것은 ghci에서 벗어난 것 같습니다. (ghci 7.10.3을 사용하고있었습니다.) –

+0

@AlbertNetymk 예, 위의 설명에서 제한 사항과 기본 규칙이 다른 것으로되어 있습니다. 따라서 제한은 해제되지만 기본 규칙은 계속 적용됩니다. 이 링크를 참조하십시오 : https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ghci.html#type-defaulting-in-ghci – Shersh