インスタンスが定義されているクラスがあります。フローティング専用のインスタンスを作成する方法は?
data MyValue a = MyValue a
class TestClass a where
funcOne:: (Real b) => a b -> a b
funcTwo:: (Real b) => a b -> a b -> a b
instance TestClass MyValue where
funcOne (MyValue x) = MyValue (x*pi)
funcTwo (MyValue x) (MyValue y) = MyValue (x*y)
私は次のエラーを取得する:
Could not deduce (Floating b) arising from a use of `pi'
from the context: Real b
私はエラーを理解し、私は、私はそれを解決する方法を知らない それはこのようになります。
(Real b)
を(Floating b)
に変更することはできません。他のインスタンスもIntegral型で動作するはずです。しかしMyValue
はFloating
とのみ意味があります。コンパイラにinstance TestClass MyValue
がFloating
としか動作しないことを伝えることは可能ですか?
そうでない場合は、x*pi
の結果を、x
のパラメータと同じReal
に戻すことはできますか?タイプが例えばIntegralの場合は、MyValue
は意味をなさないので、何が起こるかは関係ありません。