私はおもちゃ(物理)ベクターライブラリを書く過程にあり、GHCに問題があることを主張しているのは、それらの型がInteger
であるはずです。で遊んで後ハスケルがなぜ特定の型を(矛盾して)推論するのでしょうか?
Couldn't match expected type `Integer' with actual type `Double'
:これが可能であった私は、私は今、ソートのエラーを得ているだけでVector
インスタンスNum
を持つことにより、ベクトルがベクトルを乗算したい、だけでなく、(ちょうど*
を使用して)スカラー、およびコードは、問題を突き止めるために、私はこれにそれを得ている:
data V a = V a a a deriving (Show, Eq, Functor)
scale a (V i j k) = V (a*i) (a*j) (a*k)
(<.>) = scale
を今、私たちはGHCiのを頼めば、我々は何を得るタイプこれらは、次のとおりです。
>:t scale
scale :: Num a => a -> V a -> V a
>:t (<.>)
(<.>) :: Integer -> V Integer -> V Integer
私たちが確かに望んでいないのは、<.>
はInteger
にしか作用しません。これは<.>
のタイプシグネチャを含めることで修正可能ですが、実際に何が起こっているのか知りたいと思います。
可能ですか?[monomorphismの制限とは何ですか?](http://stackoverflow.com/questions/32496864/what-is-the-monomorphism-restriction) – Bakuriu