gpt4 book ai didi

haskell - 简单的Haskell阶乘函数未编译

转载 作者:行者123 更新时间:2023-12-02 10:54:11 24 4
gpt4 key购买 nike

所以我有这个简单的Haskell函数:

fact :: (Num a) => a -> a
fact 0 = 1
fact n = n * fact (n - 1)

当我尝试使用GHCi进行编译时,出现错误:
test.hs:2:6: error:
• Could not deduce (Eq a) arising from the literal ‘0’
from the context: Num a
bound by the type signature for:
fact :: Num a => a -> a
at test.hs:1:1-25
Possible fix:
add (Eq a) to the context of
the type signature for:
fact :: Num a => a -> a
• In the pattern: 0
In an equation for ‘fact’: fact 0 = 1
Failed, modules loaded: none.

看,我知道编写此函数的更好方法,但是我不在乎。我只想让此函数进行编译。我不能那样做。我的印象是,如果某物是数字,则它必须是Eq a的一个实例,因此编译器建议的可能修复方法是错误的。

如何获取此代码进行编译?

最佳答案

您假设作为Num实例的类型也必须是Eq实例的假设是错误的。考虑函数的推断类型:

> fact 0 = 1; fact n = n * fact (n - 1)
> :t fact
fact :: (Num t, Eq t) => t -> t

要成为 Num的实例,类型仅需要定义以下函数:
  • (+)
  • (*)
  • abs
  • signum
  • fromInteger
  • negate(-)
  • 关于haskell - 简单的Haskell阶乘函数未编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40099418/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com