haskell - 为什么会收到类型错误?

标签 haskell compiler-errors typeerror function-declaration

在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/

相关文章:

scala - 镜头和部分镜头有什么区别?

haskell - 帮助 GHC 在常量上将 Int 拆箱

javascript - 继续在'运算符中获取 "Uncaught TypeError: Cannot use '以搜索 '191'“jQuery

jQuery 类型错误 : <whatever> is not a function in Firefox on table object

python - 类型错误: 'function' 类型的对象在 python 中没有 len()

haskell - 在模式保护或 case 表达式中重用模式

data-structures - 将非类型化 Lisp 数据映射为类型化二进制格式以用于编译函数

c++ - 包含在头文件中

c++ - 错误: no matching function for call to 'function namel'

c++ - 重载 C++ 函数浮点参数错误