这个haskell表达式是如何评估的

Pro*_*ist 8 haskell

我正在学习haskell,我遇到了这个我无法理解的表达方式.

(flip const 1 . const flip 3 const 4) 5
Run Code Online (Sandbox Code Playgroud)

最终的结果是5,但我不知道它是如何评估的.

Lyn*_*ynn 16

根据定义(.):

  flip const 1 $ ((const flip 3) const 4) 5
Run Code Online (Sandbox Code Playgroud)

根据定义const:

= flip const 1 $ flip const 4 5
Run Code Online (Sandbox Code Playgroud)

根据定义flip:

= flip const 1 $ const 5 4
Run Code Online (Sandbox Code Playgroud)

根据定义const:

= flip const 1 5
Run Code Online (Sandbox Code Playgroud)

根据定义flip:

= const 5 1
Run Code Online (Sandbox Code Playgroud)

这是5.

(作为一个小小的奖励洞察,你能找到为什么flip const y只是id为了所有人y吗?这会减少你的表达(id . id) 5.)