二进制函数的连续传递变换


13

回想一下延续通过变换(CPS变换)这需要β = - [R [R (其中[R是固定的)和˚F β ˚F β β 通过定义 βAβA:=RRARf:ABβf:βAβB 事实上我们有延续单子与单元 η →交通β 通过定义 η X = λ [R [R

βfκr:=κ(rf).
ηA:AβA 和乘法 μ β β →交通β 通过定义 μ
ηAx:=λr.rx
μA:β(βA)βA
μAKr:=K(λf.fr).

现在让我们想想我们如何可以改变一个二进制地图,即我们要γ ˚F β β β Ç。一个很快想出 γf:ABCγf:βAβBβC 从编程的角度来看,这也是有意义的。

γfκνr:=κ(λx.β(fx)νr).

这里是我的问题:是有更深层次的原因,比其他的事实,它看起来右从编程的角度来看?例如,是否存在类别理论或其他“理论”原因认为γ有意义?例如,我们可以系统地蒸煮单子中的γ吗?γγγ

我正在寻找对函数的CPS转换的见解。n


2
您是否在寻找Haskell liftM2或概化之外的东西Applicative?您可以直接从延续应用结构派生所描述内容的n元版本(使用一种可以让您谈论n元多态函数的语言)。
copumpkin

1
我知道如何写这些概括,我想知道为什么会这样。范畴论者会理解我的要求。
Andrej Bauer 2013年

1
ApplicativeliftA2γ

3
是的,这liftA2是我建议的一部分。“惯用括号”的概念((| f x y z ... |)转换为pure f <*> x <*> y <*> z <*> ...Applicative似乎是获取问题的n元形式的系统方法。我知道CT,但是用标准编程术语谈论它似乎最简单。如果您以前从未遇到过Applicative,那么您可能想看看松散的单曲面函子(尽管Haskell的陈述也<*>涉及指数)。无论如何,我对您没有答案,但是我试图更好地了解您的意思:)
copumpkin 2013年

2
Hayo Thielecke的博士学位论文是关于CPS的分类结构的。答案可能在那里或在他的其他出版物中。cs.bham.ac.uk/~hxt/research/hayo-thielecke-publications.shtml
Dave Clarke

Answers:



4

扩大诺姆的答案:

f:ABCuncurry(f):A×BCTdblstr:TA×TBT(A×B)

TA×TBdblstrT(A×B)uncurry(f)TC

如果我们将此实例化为延续单子,我们将获得您的构造。

n

πnπstrπ:TA1××TAnT(A1××An)nf:A1××AnCγf:TA1××TAnstrπT(A1××An)TfTC

但是我仍然认为这并不能真正为您提供所需的答案...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.