詳細を知りたい問題と、回避する方法があります。私はこのコードを持っています
len :: (Num r ) => [a] -> r
len [] = 0
len xs = 1 + len ( tail xs )
avg :: (Num t) => [t] -> Double
avg xs = ( sum xs ) / ( len xs )
次のエラーが表示されます
len.hs:6:9: 予想される型「Double」と推測される型「t」を一致させることができませんでした `t' は、によって束縛される固定型変数です。 len.hs:5:12 での「avg」の型シグネチャ 式: (sum xs) / (len xs) 「avg」の定義: avg xs = (sum xs) / (len xs)
これで、このエラー (irc.freenode.net#haskell のおかげ) が除算関数の結果であることがわかりました。
(/) :: (Fractional a) => a -> a -> a
しかし、私は何をすべきかわかりません。私のavg
関数シグネチャは、除算演算子の癖 (型クラスが必要) とは何の関係もないはずFractional
です。だから、これを克服する正しい方法は、型クラスを実装する型にキャストすることFractional
だと考えていますが、その方法、またはこれが正しいかどうかさえわかりませんか? 何か案は?