2013-03-16 1 views
7

후 서명을 변경한다. 그러나 이제는 이름을 지정하려고하면 원래 서명보다 더 구체적인 서명이 나타납니다.이유는 다음 식을 가지고 <code>ghci</code> 주위 재생 할당

왜 이런 일이 발생합니까?

+1

참고 : [1] (http://stackoverflow.com/questions/7055146), [2] (http://stackoverflow.com/questions/11439163), [3] (http : // stackoverflow. com/questions/9714697), [4] (http://stackoverflow.com/questions/8434808), [5] (http://stackoverflow.com/questions/7799345), [6] (http : // stackoverflow .com/questions/8262020), [7] (http://stackoverflow.com/questions/8655900), [8] (http://stackoverflow.com/questions/11003535). 나는 정직하게 이것의 어느 것 (만일에)이 이것을 표시 할 지 모르겠다. –

답변

12

때문에 x = ... (매개 변수 없음) 형태의 정의에는 보통 in the other answer과 같은 일부 기본값을 포함하는 단일 형태 (즉, 비 다형성) 유형이 지정됩니다.

이 문제를 방지하려면 정의에 형식 서명을 추가하거나 :set -XNoMonomorphismRestriction을 사용하여 단일 변형 제한을 해제하십시오. it gets disabled by default in GHCi in some future version까지 자동으로 실행되도록 .ghci file에 추가 할 수 있습니다.

+1

또는 η 확장; ie'fx = unlines로하자. 지도 (\ (a, b) ->보기 a ++ ""++ 쇼 b) $ x' – luqui

4

기본 규칙.

GHCi에 stuff를 입력하면 기본 유형을 적용하려고 시도합니다. IIRC, Num 제약 조건이있는 경우 Integer을 선택하고 Fractional을 선택하면 Double을 선택하고 다른 모든 경우에는 ()을 선택합니다.

이것을 Haskell 소스 파일에 작성하고 GHCi로로드하면이 작업이 수행되지 않습니다 (필자는 믿는다).

모듈 단위로 기본 규칙을 변경하려면 default Int과 같이 말할 수도 있습니다.

관련 문제