FT EDSL中的Y-Combinator

时间:2010-06-23 16:32:23

标签: haskell lambda-calculus

我正在试图弄清楚如何在这个最终无标签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的默认实现。

有人知道吗?我的第一次尝试失败是因为“无法构建无限类型”的东西。

干杯, 京特

2 个答案:

答案 0 :(得分:2)

如果您介绍let,则可以提供默认实现。但你不能单独使用lam和app,因为同样的原因你不能直接在Haskell中编写它。这里你的目标是简单输入的lambda演算的扩展,那个术语不会输入。

答案 1 :(得分:2)

正如sclv指出的那样,你需要在语言中引入一个原始的定点形式。想想它是如何在Haskell中定义的:

fix :: (a -> a) -> a
fix f = let x = f x in x

一个合适的'let'绑定表格可以帮助你。 Barendregt第1章和第2章可能就在你的图书馆 - 但我相信它已经绝版(任何人都可以证实吗?)。紧随其后的是http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.46.9283