Вспомните преобразование прохождения продолжения (преобразование CPS), которое переводит в (где фиксировано) и до определяется как На самом деле у нас есть монада продолжения с единицей определенной как и умножение определяемое как β A : = R R A R f : A → B β f : β A → β B β
Теперь давайте подумаем о том , как мы можем преобразовать двоичное отображение , то есть, мы хотим . Один быстро приходит с Это имеет смысл и с точки зрения программирования.
Вот мой вопрос: есть ли более глубокая причина для , кроме того факта, что она выглядит правильно с точки зрения программирования? Например, есть ли теоретико-категорийная или другая «теоретическая» причина для размышления о том, что имеет смысл? Например, можем ли мы приготовить из монады систематическим способом?
Я ищу понимание преобразований CPS -арных функций.
источник
liftM2
или обобщенийApplicative
? Вы можете получить n-арную версию того, что вы описываете (на языке, который позволяет говорить о n-арных полиморфных функциях) непосредственно из аппликативной структуры продолжения.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
, возможно, вы захотите взглянуть на слабые моноидальные функторы (хотя утверждение Хаскелла об этом также<*>
включает в себя экспоненты). В любом случае, у меня нет ответа для вас, но я пытался лучше понять, к чему выОтветы:
источник
Увеличивая ответ Ноама:
Если мы создадим это в монаде продолжения, мы получим вашу конструкцию.
Но я все еще не думаю, что это действительно дает вам ответ, который вы ищете ...
источник