在Haskell中,在定义函数时遇到一些问题,因为参数的类型与所需的类型不匹配。
例如,我想编写一个函数,该函数采用n :: Int
并生成从1到floor
的平方根的n
的整数列表。因此,我将具有以下功能:
list :: Int -> [Int]
最初,我将函数定义如下:
list :: Int -> [Int]
list n = [1 .. floor (sqrt n)]
加载 list 时,出现类型不匹配的错误消息。但是,我不确定是否与
sqrt
函数或floor
函数的类型不匹配。错误消息如下:No instance for (Floating Int)
arising from a use of 'sqrt' at pe142.hs:6:22-27
Possible fix: add an instance declaration for (Floating Int)
In the first argument of 'floor', namely '(sqrt n)'
In the expression: floor (sqrt n)
In the expression: [1 .. floor (sqrt n)]
Failed, modules loaded: none.
有人可以向我解释是什么导致该错误,以及如何解决该错误?
最佳答案
sqrt
需要Floating
类的参数,例如一个Double
。您正在向它传递一个Int
,它不是Floating
类的实例-这就是错误消息告诉您的内容。
因此,要纠正该错误,请在调用Int
之前将Double
转换为sqrt
。您可以为此使用fromIntegral
函数。
关于haskell - 为什么会收到类型错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12379535/