7

私はlearnyouahaskellを使用してHaskellを学習してきましたが、試行しているプログラムで問題が発生しました。三角形の辺を表す3つのNum入力を評価し、それらが直角三角形を表すかどうかを確認したいと思います。これが私がこれまでに持っているものです:

isRight :: (Num a) => a -> a -> a -> Bool
isRight x y z = (x^2 + y^2) == z^2

明らかに、辺の順序を変えるには関数を長くする必要がありますが、GCHIでこのエラーが発生したため、今のところ関数を使用できません。

Could not deduce (Eq a) arising from use of '==' from the context (Num a) 
    bound by the type signature for
        isRight :: Num a => a -> a -> a -> Bool
    at isRight.hs:2:1-34

明らかに、Haskellでブール型を返す方法がわかりません。また、この問題に関するヘルプをオンラインで見つけることができませんでした。誰かが私にこれを説明するのを手伝ってくれるなら、私は感謝するでしょう。

4

1 に答える 1

25

あなたの問題はBoolを返すことではありません。問題は、型クラスのすべてのメンバーが型クラスのメンバーでNumもあるわけではないということEqです。これでコードが修正されます。

isRight :: (Num a, Eq a) => a -> a -> a -> Bool
isRight x y z = (x^2 + y^2) == z^2

型クラスの詳細については、読んでいる本の関連セクションから読むことができます:Learn YouaHaskell 。

于 2013-03-23T06:10:11.073 に答える