2011-11-01 6 views
28

IntegerをIntにキャストすることは可能ですか?他の方向も可能です:toInteger。私はIntegerがより大きな値を格納できることを知っていますが、std-lib関数を使うために会話が必要になることがあります。私は(n :: Int)と私が見つけた他のコードサンプルを試しました - しかし何も動作しません。Haskell Integerを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 n :: Int))が必要になりますが、通常、コンパイラはあなたが望むどのタイプを推測することができ、fromIntegral :: (Integral a, Num b) => a -> bいます。あなたの例の特殊な場合には

は、Data.ListgenericTake :: (Integral i) => i -> [a] -> [a]takeとしてではなく、より一般的なタイプで同じことをしている、そこにあります。

13

fromIntegerは(fromIntegralがちょうどfromInteger . toIntegerですが、第二の部分をスキップすることができますので、あなたがとにかくIntegerを持っているので)

もあります