【发布时间】:2019-10-08 00:44:57
【问题描述】:
我在 Haskell 中输入匿名函数时遇到问题。例如,当我们有:
\x -> x 5
在 GHCI 中检查的类型是 Num t1 => (t1 -> t2) -> t2,而我确定它是相反的。类似的类型
\x -> a * x
是Num a => a -> a(我知道我们需要假设 a 是一个整数,因为 (*) 的类型是 Int -> Int -> Int(没有类型类)。
另一个例子是
\f -> f x
据我检查,就像 (a -> b) -> b
但我完全关心输入匿名函数。有什么魔力可以理解这个?也许一种方法可以将此函数重写为“正常”函数以清楚地查看类型?
所以我的问题是:我们如何获得这些类型?它们来自哪里以及如何评估?
【问题讨论】:
-
我不明白这里的问题是什么,除了笼统的“我不明白类型推断是如何工作的”,这太宽泛了。你能说得更具体点吗?
-
@chi 一个问题基本上是给出了这些例子,它们对它们的类型进行评估,因此将计算给定的结果
-
@heisenberg7584 你已经在那儿给出了类型。在理解这些类型为何正确时,您遇到了什么具体问题?请编辑您的问题以添加此信息。
-
可能重复:What part of Hindley-Milner do you not understand?。如果不是重复,请谈谈原因。
-
这里的函数是匿名的并没有什么特别之处。
func x = x 5与您的第一个函数完全相同,因此具有相同的类型。
标签: haskell