2014-10-13 2 views
1

내 코드에 의존 :해결 방법 GHC는 NegativeLiterals의 7.6 부족

case x of 
    (-32768) -> Nothing 
    otherwise -> Just x 

x는 -32768에서 32767의 범위를 가지고있는 Int16입니다.

GHC 7.8 확장자는 NeativeLiterals입니다. 레드햇 RHEL6 용 GHC 7.8을 찾을 수 없으므로 GHC 7.6에서 작동하도록했습니다. 캐치는가 7.8에서 새로 추가 된 것입니다.

해결 방법을 알고 계십니까?

+1

이 기능은 ghci를 사용하여 ghc-7.6로 작성되었습니다. –

+0

예. 미안 @ 존. 7.6에서는 잘 작동하지만 7.8에서는 7.8에서 새로 추가 된 NegativeLiterals를 사용해야하는 방법에 대한 경고가 발생하므로 NegativeLiterals를 사용 했으므로 7.6에서는 컴파일되지 않습니다. 나는 대답이 7.8의 경고와 함께 살아야한다고 생각한다. –

답변

2

당신은 그냥 사용할 수 있습니다 가드 :

편집 : 좋아, 그래서 명시 적으로 입력이 필요합니다. 그것은 분명해야했습니다. 따라서 수정 된 솔루션은 다음과 같습니다.

foo :: Int16 -> Maybe Int16 
foo x = 
    case x of 
    y | y == fromIntegral (-32768) -> Nothing 
     | otherwise     -> Just x 
+0

'x'를 'Word16''Int16'으로 만들어 문제를 확인해야합니다. –

+0

예, 필자는 그것을 수행하고 사고없이 7.4.2와 7.6.3을 사용하여 테스트했습니다. 'f :: Word16 -> 어쩌면 Word16''f'의 본문이 원래 코드입니다. 오류 메시지를 복사하여 붙여 넣을 수 있습니까? –

+0

음. 아마 신경 쓰지 마라. 7.8에서 NegativeLiterals를 사용하여 7.6에서 빌드하지 않도록 경고하는 중이었습니다. 그러나 NegativeLiterals를 꺼내면 7.6에서 잘 작동하고 잘 작동합니다. 감사. –