【发布时间】:2018-10-28 04:11:14
【问题描述】:
我要复习一下,Haskel 类型推断对我来说有点棘手,尽管它看起来很简单。
给定这个函数:nat x = x : ( nat (x+1))
类型:Num t => t -> [t]
这很清楚,因为 nat 函数接受一个元素并构造一个无限列表。
但是,现在我被要求指定head (nat 2)的类型
我完全理解head :: [a] -> a的原因和类型是什么
但为什么是head (nat 2) :: Num c => c 有人能解释一下原因吗?
从最通用的类型开始,即 A -> B(我假设它的 A -> B 因为它需要一个参数)接下来是什么?
编辑
这个Give the type of the expression: head (nat 2)表示我应该给出函数的类型,或者只是返回的值,实际上它必须是一个数字,这就是为什么它是Num c => c,我刚刚回答了我的问题吗?
原问题:Give the type of the expression: head (nat 2)
证明你的答案。
谢谢
【问题讨论】:
-
我不确定我是否理解您的问题?你指定了
nat的类型和head的类型,为什么把它们组合起来结果会很混乱? -
结合它们是什么意思
-
您的问题是“给出类型...”并且您声明它是
Num c => c。你的问题是什么?您通过函数应用组合了2、nat和head的类型。
标签: haskell types functional-programming type-inference