我们可以在 Haskell 中始终使用 <$> 来定义“point free”函数吗?

问题描述 投票:0回答:1

我一直在学习 Haskell 中的

<$>
<*>
运算符有多么强大,以及如何在通常需要的地方定义一些不带参数的函数。我按照以下步骤更改我的
doThing
函数并逐渐删除其三个参数:

1) doThing x y z = (x + y) * z
2) doThing x y = ((x + y) *)
3) doThing x = (*) <$> (x +)
4) doThing = ((*) <$>) <$> (+)

所有这些函数都采用三个数字

x
y
z
,并计算
(x + y) * z
。我知道从实际意义上来说,这既不漂亮,也不是一个好的编程实践,但我仍然想知道是否有可能将带有 N 个变量的any数学表达式描述为一个函数,而无需显式命名这 N 个变量。我尝试过更复杂的表达方式,但没有取得多大成功;即使是上面的第四步我也很难理解。

haskell functor applicative
1个回答
0
投票

是的,总是有可能的;可以简化为的一组相当标准的组合器是 SKI 演算。参见例如此链接有关算法的一些讨论。

© www.soinside.com 2019 - 2024. All rights reserved.