web-dev-qa-db-ja.com

Haskell整数から整数への変換?

整数を整数にキャストすることは可能ですか?他の方向は可能です:toInteger。 Integerはより大きな値を格納できることは知っていますが、std-lib関数を使用するには会話が必要な場合があります。私は(n :: Int)と私が見つけた他のコードサンプルを試しました-しかし、何も動作しません。

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

fromIntegralを使用します。

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

fromIntegral :: (Integral a, Num b) => a -> bであるため、追加の型注釈(例、_(fromIntegral n :: Int)_)が必要になる場合がありますが、通常、コンパイラは必要な型を推測できます。

あなたの例の特別な場合、_Data.List_にはgenericTake :: (Integral i) => i -> [a] -> [a]があり、takeと同じことをしますが、より一般的な型を持ちます。

47
dave4420

fromIntegerもあります(fromIntegralfromInteger . toInteger、しかし、とにかくIntegerがあるので、2番目の部分をスキップできます)

17
newacct