Przypomnijmy transformację przechodzącą kontynuację (transformacja CPS), która przyjmuje do β A : = R R A (gdzie R jest ustalone) if : A → B do β f : β A → β B zdefiniowane przez β W rzeczywistości mamymonadę kontynuacyjnąz jednostką η A : A → β A zdefiniowaną przez η A x : = λ r . r
Teraz zastanówmy się w jaki sposób możemy przekształcić binarne mapa , czyli chcemy y f : p A → beta B → p C . Szybko pojawia się γ Ma to również sens z punktu widzenia programowania.
Oto moje pytanie: czy istnieje głębszy powód , inny niż fakt, że wygląda to właściwie z punktu widzenia programowania? Na przykład, czy istnieje uzasadnienie teoretyczne lub inne „teoretyczne” powody, by sądzić, że γ ma sens? Na przykład, czy możemy ugotować γ z monady w systematyczny sposób?
Szukam wglądu w transformacje CPS elementowych funkcji.
źródło
liftM2
lub uogólnieniamiApplicative
? Możesz uzyskać n-aryjską wersję tego, co opisujesz (w języku, który pozwala mówić o n-ary funkcjach polimorficznych) bezpośrednio ze struktury aplikacyjnej kontynuacji.Applicative
liftA2
liftA2
było częścią tego, co sugerowałem. Pojęcie „idiom nawias” ((| f x y z ... |)
przekłada się napure f <*> x <*> y <*> z <*> ...
)Applicative
wydaje się systematycznym sposobem na uzyskanie n-arytycznej formy twojego pytania. Znam CT, ale wydawało się, że najłatwiej jest o tym mówić w standardowych terminach programowania. Jeśli jeszcze tego nie spotkałeśApplicative
, możesz przyjrzeć się luźnym funktorom monoidalnym (chociaż wypowiedź Haskella o tym<*>
zawiera również wykładnicze). W każdym razie nie mam dla ciebie odpowiedzi, ale starałem się lepiej zrozumieć, o co ci chodzi :)Odpowiedzi:
źródło
Zwiększenie odpowiedzi Noama:
Jeśli utworzymy instancję monady kontynuacyjnej, uzyskamy twoją konstrukcję.
Ale nadal nie sądzę, że to naprawdę daje odpowiedź, której szukasz ...
źródło