假设我们有这个无点函数:
f1 = flip const map
我对它究竟是如何工作以及它应该做什么一无所知?即我知道什么是map、const 和flip 函数。但是像这样把它们放在一起对我来说没有意义。这个函数内部到底发生了什么?它似乎每次都会返回相同的东西,但是......为什么?
让我们一点一点地看看这个函数做了什么
flip const map x = (flip const) map x
= const x map
= x
这就是为什么它总是返回你给它的东西!
请记住,Haskell 中的所有函数都只接受一个参数,但通过返回另一个函数来模拟接受多个参数。所以flip const map
也可以写成(flip const) map
。const
通常忽略它的第二个参数并返回它的第一个参数。flip
反转参数的顺序,因此flip const
忽略第一个参数并返回第二个参数。因此map
被忽略并返回一个始终返回其参数的函数。
如果你把其他东西放在那里,真的没关系map
。该表达式flip const
翻转 的参数const
,因此它不是总是返回它的第一个参数,而是返回它的第二个。您可以通过重新定义f1 = flip const undefined
. 如果曾经评估过,这将导致异常undefined
,但您可以看到它给出了相同的行为。本质上,flip const undefined = id
.