私はハスケルを新しくしています。なぜこれがエラーを引き起こすのか不思議です。ハスケル推論型エラー
sumtest :: (Real a) => [a] -> a
sumtest [] = 0
sumtest (x:xs) = x + sumtest xs
avgFunction :: (Integral a, Floating b) => [a] -> b
avgFunction a = sumtest a/length a
エラー
ERROR file:code/test1.hs:114 - Inferred type is not general enough
*** Expression : avgFunction
*** Expected type : (Integral a, Floating b) => [a] -> b
*** Inferred type : (Integral Int, Floating Int) => [Int] -> Int
----- sumtest a
の結果はa
を入力した
sumtest :: (Num a) => [a] -> a
sumtest [] = 0
sumtest (x:xs) = x + sumtest xs
avgFunction :: (Integral a, Floating b) => [a] -> b
avgFunction a = fromIntegral (sumtest a)/fromIntegral (length a)
avgFunction' 'の署名はあなたがB''にどこかA' 'から変換することを示唆しています。これはどこで起こるはずですか?現時点ではどこにでも変換を行わないため、エラーが発生します。ところで、一般的な「Num」からの変換は可能ではありません。どのようにして複素数を実際のものに "変換"しますか? – leftaroundabout
編集を参照してください - そうですね、整数を取り入れて潜在的に小数点以下の平均値を求めたいと思います。 –