haskell - FT EDSL 中的 Y 组合器

标签 haskell lambda-calculus

我正在尝试找出如何在这个 Finally 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 = .....

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

有人知道吗?由于“无法构造无限类型”的问题,我的第一次尝试失败了。

干杯, 君特

最佳答案

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

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

相关文章:

optimization - 优化Haskell程序

haskell - 为什么这两个 haskell 函数不等价?

haskell - 在Yesod中,我们是否可以从仅返回IO()的方法中调用返回Handler()的方法

haskell - 使用类型类为使用 Acid-State 时提供替代实现

具有递归类型的 Haskell AST

lambda - 适用于教会数字的公式

functional-programming - 什么是 Lambda 可定义性?

haskell - 对 Num 和 Char 值使用 Haskell 加法函数

haskell - 是否有任何非递归术语可以折叠在斯科特编码列表上?

haskell - 求解函数方程的最新方法是什么?