haskell - 无法弄清楚这个简单的兴趣函数需要什么类型的签名
问题描述
所以我试图做一个递归的单利函数,但我一生都无法弄清楚我需要使用什么类型的签名。这是我的代码:
interest :: (Fractional a) => a-> a-> a-> a
interest p r 0 = p
interest p r t = (1 + (p/100))*interest p r (t-1)
这段代码给了我错误“无法从上下文中推断出由文字'0'引起的(Eq a):小数a受类型签名的限制:interest :: forall a。小数a => a -> a ->一个->一个“
但是当我尝试将约束更改为(Eq a)时,它告诉我“可能修复(Fractional a)
有人可以帮我吗?
解决方案
0
第一个子句中的检查也需要a
是类型类的实例Eq
,因此您应该将其添加到签名中:
interest :: (Eq a, Fractional a) => a-> a -> a -> a
interest p r 0 = p
interest p r t = (1 + (p/100))*interest p r (t-1)
推荐阅读
- php - 无法使用 PHP 更改会话变量
- r - 正则表达式在 Rmarkdown 中搜索数据表
- bash - 如何从命令输出中获取第一行中最后一个单词的值
- node.js - Node-apn 频繁抛出 Error 8
- smtp - zulip mailgun:5.7.0 Mailgun 不喜欢您的登录名或密码
- excel - 带有多个过滤器的总和与 or 运算符相得益彰?
- react-native - 如何将 Platform.OS 用于反应原生的元素?
- angular - 如何使用 ngfor angular 2 填充层次结构数据
- python-3.x - 提取文本 OpenCV 轮廓
- php - 比较两个日期,第二个日期应该大于 php 中的第一个日期