我一直在使用learnyouahaskell学习Haskell,而且我在尝试的程序中遇到了问题.我想评估表示三角形边的三个Num输入,看看它们是否代表一个直角三角形.这是我到目前为止:
isRight :: (Num a) => a -> a -> a -> Bool
isRight x y z = (x^2 + y^2) == z^2
Run Code Online (Sandbox Code Playgroud)
显然,该函数需要更长才能允许不同的边数,但是由于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
Run Code Online (Sandbox Code Playgroud)
显然我不明白如何在Haskell中返回一个布尔类型,我无法在线找到任何与此问题相关的帮助.如果有人帮我解释一下,我将不胜感激.
Nei*_*ter 21
问题不在于返回Bool.问题是并非所有Num类型类的成员都是Eq类型类的成员.这将修复您的代码.
isRight :: (Num a, Eq a) => a -> a -> a -> Bool
isRight x y z = (x^2 + y^2) == z^2
Run Code Online (Sandbox Code Playgroud)
您可以从您正在阅读的本书的相关部分阅读有关类型类的更多信息:了解您的Haskell.