HaskellでfromIntegerを使用する方法?
質問
Haskellでは2 ^ 8を計算するための一つの方法は、書き込むことである。
product(replicate 8 2)
次のように定義され、このための機能を、作成しようとすると...
power1 :: Integer → Integer → Integer
power1 n k | k < 0 = error errorText
power1 n 0 = 1
power1 n k = product(replicate k n)
私は次のエラーを取得します:
Couldn't match expected type 'Int' against inferred type 'Integer'
私の推測では、私はどこかfromInteger機能を使用しなければならないということです...私はわからないんだけどどこかどのように?それはインターフェイスであるか何fromIntegerであり、私はそれをどのように使うのか?
おかげ
解決
まず、fromIntegerを使用することはありません。 fromIntegralを使用します。
型エラーが複製の種類を調べることである。ここで、あなたが見ることができます:
replicate :: Int -> a -> [a]
あなたはそれはあなたがアサートしまし引数として「K」は型宣言を経由して整数であるGIVときので、我々は、型エラーがあります。
このためのより良いアプローチはgenericReplicateを使用することです
genericReplicate :: (Integral i) => i -> a -> [a]
それではます:
power1 n k = product (genericReplicate k n)
他のヒント
たぶん簡単な解決策は、に、関数の型定義を変更することです
power1 :: Integer -> Int -> Integer
あなたは、同様のエラーメッセージの残りの部分を見なければならない、それはあなたの質問に正確に答えをあなたに伝えます:
Couldnt match expected type 'Int' against inferred type 'Integer'
In the first argument of 'replicate', namely 'k'
In the first argument of 'product', namely '(replicate k n)'
In the expression: product (replicate k n)
「複製の最初の引数に」。それはfromIntegral
を追加する場所です。
所属していません StackOverflow