Lembre-se da transformação de passagem de continuação (transformação CPS) que leva para β A : = R R A (onde R é fixo) ef : A → B para β f : β A → β B definida por β De fato, temos amônada de continuaçãocom a unidade η A : A → β A definida por η A x : = λ r . r
Agora vamos pensar sobre como podemos transformar um binário mapa , ou seja, queremos γ f : β A → β B → β C . Um rapidamente aparece com γ Isso também faz sentido do ponto de vista da programação.
Aqui está minha pergunta: existe uma razão mais profunda para , além do fato de parecer correto do ponto de vista da programação? Por exemplo, existe uma razão teórica por categoria ou outra razão "teórica" para pensar que γ faz sentido? Por exemplo, podemos preparar γ da mônada de maneira sistemática?
Eu estou procurando uma visão sobre transformações CPS de funções.
fonte
liftM2
ou generalizaçõesApplicative
? Você pode derivar uma versão n-ária do que descreve (em um idioma que permite falar sobre funções polimórficas n-árias) diretamente da estrutura do aplicativo de continuação.Applicative
. PossuiliftA2
qual é o meu , consulte hackage.haskell.org/packages/archive/base/4.2.0.0/doc/html/…liftA2
fazia parte do que eu estava sugerindo. A noção de "suporte de idioma" ((| f x y z ... |)
traduz parapure f <*> x <*> y <*> z <*> ...
) deApplicative
parece ser a maneira sistemática de obter a forma n-ária da sua pergunta. Eu conheço o CT, mas parecia mais simples falar sobre isso em termos de programação padrão. Se você não se deparouApplicative
antes, pode querer olhar para os funcionadores monoidais relaxados (embora a declaração de Haskell sobre isso<*>
envolva exponenciais também). Enfim, eu não tenho uma resposta para você, mas estava tentando entender melhor o que estava recebendo :)Respostas:
fonte
Aumentando a resposta de Noam:
Se instanciamos isso na mônada de continuação, obtemos sua construção.
Mas ainda não acho que isso realmente lhe dê a resposta que você está procurando ...
fonte