Вспомните преобразование прохождения продолжения (преобразование CPS), которое переводит в (где фиксировано) и до определяется как На самом деле у нас есть монада продолжения с единицей определенной как и умножение определяемое как β A : = R R A R f : A → B β f : β A → β B β
Теперь давайте подумаем о том , как мы можем преобразовать двоичное отображение , то есть, мы хотим . Один быстро приходит с Это имеет смысл и с точки зрения программирования.
Вот мой вопрос: есть ли более глубокая причина для , кроме того факта, что она выглядит правильно с точки зрения программирования? Например, есть ли теоретико-категорийная или другая «теоретическая» причина для размышления о том, что имеет смысл? Например, можем ли мы приготовить из монады систематическим способом?
Я ищу понимание преобразований CPS -арных функций.
Applicative
. У меня есть liftA2
это , см. Hackage.haskell.org/packages/archive/base/4.2.0.0/doc/html/…
liftA2
было частью того, что я предлагал. Понятие «идиоматическая скобка» (в (| f x y z ... |)
переводе на pure f <*> x <*> y <*> z <*> ...
) Applicative
выглядит как систематический способ получить n-арную форму вашего вопроса. Я знаю CT, но казалось, что проще всего говорить об этом в стандартных терминах программирования. Если вы раньше не сталкивались Applicative
, возможно, вы захотите взглянуть на слабые моноидальные функторы (хотя утверждение Хаскелла об этом также <*>
включает в себя экспоненты). В любом случае, у меня нет ответа для вас, но я пытался лучше понять, к чему вы
liftM2
или обобщенийApplicative
? Вы можете получить n-арную версию того, что вы описываете (на языке, который позволяет говорить о n-арных полиморфных функциях) непосредственно из аппликативной структуры продолжения.