首页 > 解决方案 > 无法弄清楚这个简单的兴趣函数需要什么类型的签名

问题描述

所以我试图做一个递归的单利函数,但我一生都无法弄清楚我需要使用什么类型的签名。这是我的代码:

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)

有人可以帮我吗?

标签: haskell

解决方案


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)

推荐阅读