4
我一直在學習使用learnyouahaskell的Haskell,並且我遇到了一個我一直在嘗試的程序的問題。我想評估三個代表三角形邊的Num輸入,看它們是否代表一個直角三角形。以下是我迄今爲止:如何在Haskell中返回一個布爾值
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中返回一個布爾類型,並且我一直無法在線找到任何有關這個問題的幫助。如果有人願意幫我解釋一下,我將不勝感激。先謝謝了!
謝謝!所以說'(Num a,Eq a)'實質上是指'a'可以是'Num'或'Eq'類型的成員。 – lfnunley 2013-03-23 06:12:48
@lfnunley:這意味着'a'是* Num和Eq(它必須是使用你的函數)的成員。如果它只是一個成員,那麼它不符合該類型。 – Chuck 2013-03-23 06:16:55
爲了使用'(^)'和'(+)',你需要'Num',並且你需要'Eq'才能使用'(==)'。 – Landei 2013-03-25 10:09:17