Есть ли что-то вроде продолжения Arrow в трансформаторе?

ContTМонадный трансформатор обладает интересным свойством: если есть* -> *типа, такого какSet, который имеет четко определенные монадические операции, но не может иметь Monad экземпляр из-за некоторых ограничений (здесь Ord a), это можно обернуть ContT (ContT r Set) чтобы получить экземпляр монады, и отложить ограничения вне его, например, когда мы вводим Set вContT r Set, См. Построение эффективных экземпляров монады наSet используя продолжение монады.

Есть ли что-то похожее на стрелки? Стрелочный трансформер, который позволил бы обернуть в него "почти стрелку", получив действительный Arrow Например, и отложить проблемные ограничения в той части, где мы вводим в нее "почти стрелка"?

Например, если у нас был тип AlmostArrow :: * -> * -> * для которого у нас было бы обычное Arrow операции, но с ограничениями, такими как

arr' :: (Ord a, Ord b) => (a -> b) -> AlmostArrow a b
(>>>') :: (Ord a, Ord b, Ord c) => AlmostArrow a b -> AlmostArrow b c -> AlmostArrow a c

В качестве бонуса, если да, есть какой-нибудь изящный, общий способ теории категорий, как вывести оба ContT а такой стрелочный трансформатор?

0 ответов

Другие вопросы по тегам