实际使用中的Haskell $运算符

时间:2018-10-02 05:44:13

标签: haskell operators operator-precedence

我正在尝试使用$运算符来了解Haskell表达式。专门介绍如何使用$运算符或其他必要的运算符在Haskell中编写代码:

add 1 (add (subtract 2 4) (subtract 8 16))

我设法删除了两个paren组,如下所示:

add 1 $ add (subtract 2 4) $ subtract 8 16

但是仍然需要删除最后一对。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您可以尝试中缀表格

add 1 $ subtract 2 4 `add` subtract 8 16

编辑

还有其他方法。

让我们定义:

newtype W a = W { w :: a } 

pure' = W

(.$.) :: W (a -> b) -> a -> W b
(.$.) (W a) b = W $ a b

以及要使用的操作

plus :: Int -> Int -> Int
plus = (+)

然后我们可以下一步

foo :: Int
foo = w $ pure' plus .$. plus 1 2  .$.  2 

它基本上是适用的函子(您可以在Google上搜索它的示例),只是名称不同。

您用w $ pure'前缀操作,并用.$.分隔参数。