2011-11-01 7 views
28

Integer를 Int로 캐스트 할 수 있습니까? 다른 방향도 가능합니다 : tointeger. Integer가 더 큰 값을 저장할 수 있지만 std-lib 함수를 사용하려면 대화가 필요한 경우가 있습니다. 나는 (n :: Int)와 내가 찾은 다른 코드 샘플을 시도했지만 - 아무것도 작동하지 않는다.하스켈 정수를 정수로 변환 하시겠습니까?

takeN :: Integer -> [a] -> [a] 
takeN n l = take n l 

답변

33

fromIntegral을 사용하십시오.

takeN :: Integer -> [a] -> [a] 
takeN n l = take (fromIntegral n) l 

fromIntegral :: (Integral a, Num b) => a -> b, 그래서 때때로 당신은 당신이 원하는 입력하는 추론 할 수있는 별도의 유형 약어 (예를 들어 (fromIntegral n :: Int)), 그러나 보통 컴파일러가 필요합니다 참고있다.

예제의 특수한 경우에 Data.ListgenericTake :: (Integral i) => i -> [a] -> [a]이 있으며 더 일반적인 유형의 take과 동일한 기능을 수행합니다.

13

은 (fromIntegral 그냥 fromInteger . toInteger이지만 어쨌든 Integer이 있기 때문에 당신은 두 번째 부분을 건너 뛸 수 있도록)도 fromInteger

관련 문제