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


13

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

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

现在让我们想想我们如何可以改变一个二进制地图,即我们要γ ˚F :β 一→ β 乙→ β Ç。一个很快想出 γf:A→B→Cγ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:A→B→Cuncurry(f):A×B→CTdblstr:TA×TB→T(A×B)

TA×TB→dblstrT(A×B)→uncurry(f)TC

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

n

πnπstrπ:TA1×⋯×TAn→T(A1×⋯×An)nf:A1×⋯×An→Cγf:TA1×⋯×TAn→strπ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.