私は持っています
coefficient :: ???????
coefficient = 1.0
と
val :: Int
そして私はしたい
result :: ???????
result val coefficient = val * coefficient
これを機能させるには、どのタイプの署名と変換関数を実行する必要がありますか?valを任意の種類のNumに一般化する機能が必要な場合は、その上で何をする必要がありますか?
これ:
coefficient = 1.0
val :: Int
val = 3
result :: Num a => a
result = coefficient * (fromIntegral val)
このコンパイラの警告が表示されます:
Could not deduce (a ~ Double)
from the context (Num a)
bound by the type signature for result :: Num a => a
at Move.hs:17:1-41
`a' is a rigid type variable bound by
the type signature for result :: Num a => a at Move.hs:17:1
In the first argument of `(*)', namely `coefficient'
In the expression: coefficient * (fromIntegral val)
In an equation for `result':
result = coefficient * (fromIntegral val)
私はそれが私が最初に尋ねたものではないことを知っています、私は私のコードをサニタイズするときにいくつかの間違いをしました。
係数のタイプがあります:
coefficient :: Num a => a
coefficient = 1.0
val :: Int
val = 3
result :: Num a => a
result = coefficient * (fromIntegral val)
結果のエラー:
Could not deduce (Fractional a) arising from the literal `1.0'
from the context (Num a)
bound by the type signature for coefficient :: Num a => a
at Move.hs:12:1-17
Possible fix:
add (Fractional a) to the context of
the type signature for coefficient :: Num a => a
In the expression: 1.0
In an equation for `coefficient': coefficient = 1.0