基本类型声明练习中的符号混淆

时间:2016-08-14 17:39:25

标签: haskell

我正在阅读新书 Haskell Programming from First Principles 。看起来不错,但我觉得解释中有一些令人困惑的漏洞。如果我遗漏了一些基本的东西,我道歉。

第5章的最后一个问题是填写???事情是有道理的:

munge :: (x -> y) -> (y -> (w, z)) -> x -> w
munge = ???

向我解释的解决方案(经过多次讨论之后):

g :: y -> (w, z)
g = undefined

f :: x -> y
f = undefined

munge :: (x -> y) -> (y -> (w, z)) -> x -> w
munge g f v = fst (g (f v))

我以两种方式对这个例子感兴趣。

首先,似乎munge函数应该将函数作为输入,需要x -> y。但是munge的定义方式,似乎我们首先向函数v提供了一个额外的参数f。但是如果f :: x -> y,那么f v这个词只不是y而不是x -> y类型的那个?

其次,我很难理解为什么x出现在类型声明中倒数第二的位置。那时我觉得(y -> (w,x))步骤之后的逻辑下一篇文章应该只是w,因为在那个阶段,函数g正在应用于fst和{{ 1}}应该是w返回的类型。我可以感觉到我很接近,但不能完全缩小差距。

显然我不能正确理解符号。谁能让我直截了当?

编辑:好的,这是第二部分的澄清问题。是否可以修改fst函数,使其具有以下类型(即省略了倒数第二个munge应用程序的原始类型)?如果是这样的话会是什么样的?

x

0 个答案:

没有答案