haskell - 没有因使用 `>' 而产生 (Ord int) 的实例,Haskell

标签 haskell compilation

其他问题虽然类似,但与这个不太一样。在这个特定的编译器错误中,Haskell GHC 不会编译以下代码,原因如下。我根本不明白 - 代码非常简单。

--factorial

fact :: int -> int
fact 0 = 1
fact n | n > 0 = n * fact(n - 1)

main = print (fact 10)

(错误:)

No instance for (Ord int) arising from a use of `>'
Possible fix:
add (Ord int) to the context of
the type signature for fact :: int -> int
In the expression: n > 0
In a stmt of a pattern guard for
an equation for `fact':
n > 0
In an equation for `fact': fact n | n > 0 = n * fact (n - 1)

你能向我解释一下这个问题吗?

最佳答案

Int 就是你想要的:

fact :: int -> int

-->

fact :: Int -> Int

由于在 Haskell 中,类型需要以上限开头。

编辑:感谢 Yuras 对此发表评论:

或者,如果您愿意,可以使用类型类:

fact :: Integral a => a -> a

您可以根据自己的喜好命名类型变量,包括int。此外,如果您想定义一般数字的阶乘,Num 可能更适合您的目的。

关于haskell - 没有因使用 `>' 而产生 (Ord int) 的实例,Haskell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17376071/

相关文章:

Haskell,算法所有可能的数字组合

scala - 功能设计模式

基于环境变量的编译

c++ - 如何正确扩展C++中的类并编写其头文件?

c++ - 是否可以在 C++ 编译时使用模板元编程输出评估值?

haskell - Docker 中静态链接的 Haskell 程序

haskell - Haskell 中的 Parsec 解析

c++ - 什么是 boost 密集 C++/模板编译的良好 CPU/PC 设置?

haskell - 在 Haskell 标准库的帮助下重构这样的虚拟代码的最佳方法是什么?

c# - 是否可以在 Visual Studio 中编译之前立即添加 C# 类