2011-11-01 82 views
28

是否可以將Integer轉換爲Int?另一個方向是可能的:toInteger。我知道Integer能夠存儲更大的值,但有時需要使用std-lib函數進行對話。我試過(n :: Int)和我找到的其他代碼示例 - 但沒有任何效果。Haskell將整數轉換爲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

還有fromIntegerfromIntegral只是fromInteger . toInteger,但因爲你有一個Integer反正這樣你就可以跳過第二部分)