크기 (minBound
, maxBound
)와 다양한 정수형의 "10 진수 표현"길이를 확인하는 동안 이상한 동작이 발생했습니다. GHCi를 사용ghci - defaulting confusion
: 나는 19
를 기대할 수있는 마지막 장소에서
Prelude> :{
Prelude| let mi = minBound
Prelude| ma = maxBound
Prelude| le = fromIntegral $ length $ show ma
Prelude| in [mi,ma,le] :: [Int]
Prelude| :}
[-9223372036854775808,922372036854775807,2]
^
.
내 첫번째 추측은 maxBound
()
기본값 따라서는 2
얻을 수 있다는 것입니다,하지만 난 이해하지 않는 ma
는 명시 적 유형 약어 (:: [Int]
)에 의해 Int
을해야하기 때문에 -해야 ma
라는 이름의 모든 기호와 참조 투명성에 의해 같은.
위의 문장을 파일에 넣은 다음 GHCi로로드하면 올바른 결과를 얻을 수 있습니다.
그럼 왜 잘못된 결과가 나옵니까?
내가 첫 번째 추측은'ma' ', 아주 가까이 생각 GHCi에서 수동으로 monormorphism 제한을 켜 입력
Int
이 될 수 있습니다 'le'는'ma :: Bounded a => a'를 사용하여 쇼에서'()'를 기본값으로 사용합니다. 'ma = maxBound :: Int'를 다시 사용하면 19를 얻을 수 있습니다. – jkeuhlen어떻게 타입이 고정되지 않을 수 있습니까? – epsilonhalbe
반대의 동작이 예상되는 경우 모든 동작이 혼란 스러울 수 있습니다. –