我一直在使用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中返回布尔类型,并且我一直无法在网上找到与此问题相关的任何帮助。如果有人能帮我解释一下,我将不胜感激。
发布于 2013-03-23 14:10:11
你的问题不是返回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。
https://stackoverflow.com/questions/15583908
复制相似问题