如何在Haskell中返回一个布尔值

时间:2013-03-23 06:03:10

标签: haskell

我一直在使用learnyouahaskell学习Haskell,而且我在尝试的程序中遇到了问题。我想评估表示三角形边的三个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中返回一个布尔类型,而且我无法在线找到任何与此问题相关的帮助。如果有人帮我解释一下,我将不胜感激。

1 个答案:

答案 0 :(得分:21)

你的问题不在于返回Bool。问题是并非Num类型类的所有成员都是Eq类型类的成员。这将修复您的代码。

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

您可以从您正在阅读的本书的相关部分了解有关类型类的更多信息:Learn You a Haskell