2016-07-26 2 views
0

의 나는이 코드 조각이 있다고 가정 해 봅시다 : 하나 X 또는 그 후속도 같이결과가 정수이지만 ghc가 확실하지 않은 경우 어떻게해야합니까?

demo::Integer -> Integer 
demo x = x*(x+1)/2 

main = do print $ demo 8 

명확하게, 결과는 정수이다.
은 당연 컴파일러는 / 살펴보고

[1 of 1] Compiling Main    (debug.hs, debug.o) 

debug.hs:2:17: 
    No instance for (Fractional Integer) arising from a use of `/' 
    Possible fix: add an instance declaration for (Fractional Integer) 
    In the expression: x * (x + 1)/2 
    In an equation for `demo': demo x = x * (x + 1)/2 

를 말합니다하지만 내 지식 IntegerFractional의 일부가 아닙니다. Integer -> Integer 서명은 어떻게 보관할 수 있습니까?

+2

정수에는'/'를 사용할 수 없습니다. ''데모 x = x * (x + 1)'div' 2'' 시도해보십시오 – pdexter

+0

고마워요, 그게 전부입니다! 네가 대답하면 받아 들일거야. – peer

+0

또한 * 수학 번호 *와 프로그래밍 언어의 구현이 다른 점을 기억하십시오. 특정 표현식이 항상 정수라는 것을 수학적으로 증명할 수 있다고해서 프로그래밍 언어를 사용하여 계산할 때 실제로 정수를 얻는 것은 아닙니다. 그것은 구현에 달려 있습니다. – Bakuriu

답변

5

함수는 Integer과 함께 사용할 수 없습니다. 고전적인 정수 나누기를 원하면 div을 대신 사용하십시오.

관련 문제