2009-06-14 3 views
5

하스켈에서 32 비트 정수의 길이를 넘는 숫자를 처리하는 함수를 작성했습니다. 이 작업을 수행 할 수있는 유형을 찾을 수 없으며 잘못된 용어를 찾는 것 같습니다.하스켈 64 비트 숫자 유형

그것은 정밀도의 손실없이 약 2^(40)의 길이와 숫자를 개최 할 수 있어야

예 : 대신 IntInteger 데이터 유형을 원하는

addTwo :: Int -> Int -> Int 
addTwo a b = a + b 

main :: IO() 
main = do 
    putStrLn (show (addTwo 700851475143 1)) 
+4

아이러니하게도 addTwo가 다형성으로 추론되었으므로 (예 : Num a => a -> a -> a), 그 다음 숫자에 대해 가장 일반적인 유형 인 정수인 – newacct

+5

이 기본값으로 설정되었지만 아무 것도 배울 필요가 없었습니다. – Yacoby

답변

21

제한되지 않은 정밀도의 경우 정수 유형을 사용하십시오. 플랫폼 간 64 비트 정밀도의 경우 Data.Int.Int64를 사용하십시오. 둘 다 Hoogle에서 쉽게 찾을 수 있습니다 : http://haskell.org/hoogle/

7

:

addTwo :: Integer -> Integer -> Integer 
0

Int 대신 무제한의 정밀도 인 Integer을 사용하십시오.