有没有更好的方法编写自引用let表达式

时间:2019-10-26 03:33:03

标签: haskell

即我们可以更简洁地写以下内容吗?

bar in_env a = let out_env = foo in_env (R a out_env) in out_env

我想写类似

bar in_env a = foo in_env (R a ??)

但是也许不可能?

1 个答案:

答案 0 :(得分:8)

首先,像这样重写它,这样您就可以在下一步中轻松归类化out_env

bar in_env a = let out_env = foo in_env . R a $ out_env in out_env

然后,使用递归let等效于fix的事实:

import Data.Function (fix)
bar in_env a = fix $ foo in_env . R a