我试图弄清楚如何在这个 Final Tagless EDSL 中表达 Y-Combitor:

class Symantics exp where
    lam :: (exp a -> exp b) -> exp (exp a -> exp b)
    app :: exp (exp a -> exp b) -> exp a -> exp b

    fix :: ...
    fix f = .....

我不确定,但我认为使用“lam”和“app”应该可以实现 Y-Combinator 的默认实现。

有人知道怎么做吗?我的第一次尝试失败了,因为“无法构造无限类型”这件事。

干杯,
君特

最佳答案

如果引入 let ,则可以提供默认实现。但是你不能单独使用 lam 和 app 这样做,出于同样的原因,你不能在没有 let 的情况下直接在 Haskell 中编写它。您在这里的目标是简单类型 lambda 演算的扩展,而该术语只是不会输入其中。

关于haskell - FT EDSL 中的 Y 组合器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3103587/

10-15 16:17