首页 > 解决方案 > Haskell 类型解释

问题描述

我不理解以下代码的简单类型错误

addCustom :: Num a => a -> a
addCustom a = a + 1.2

它抛出

无法从字面“1.2”推导出(小数 a)

我不知道为什么。

标签: haskelltypes

解决方案


你的类型签名

addCustom :: Num a => a -> a

声明addCustom适用于所有数字类型a,包括整数。

但这addCustom (0 :: Integer)将是一个错误:a + 1.2不能用整数算术完成,因为1.2它不是整数值(它是小数)。

所以你需要做的就是改变你的函数体:

addCustom a = a + 1

(这有效,因为1存在于所有数字类型中)或更改类型签名:

addCustom :: Fractional a => a -> a

(这限制addCustom了它只能与小数类型一起使用,其中1.2是有效值)。


推荐阅读