Подумалось мне про трансформеры монад, что если у нас есть натуральные преобразования из монад m и n в некую монаду l, то l - это их сумма, если добавить ещё и обратную функцию. Т.е. при наличии натурального преобразования m => t и n => t можем получить и m+n => t.
Попробовал я это представить прямо в таком виде:
data MonadSum m n a = MonadSum
(
Read more... )
Reply
lift : m => t -- натуральное преобразование
при этом, как я понимаю, должны выполняться:
return = lift . return
join . lift . map lift = lift . join
Ко мне можно на ты
Reply
Reply
Точно так же можно представить Either:
data Either a b = Either {
either :: forall c. (a -> c) -> (b -> c) -> c }
Или я несу чушь?
Reply
Кроме того, я имел в виду монады на произвольной категории, а у тебя CCC (и даже хуже), и именно благодаря этой дополнительной структуре получился трюк.
Reply
Что такое ССС?
Reply
Чего? Haskell, конечно, не требует доказательств, но люди обычно доказывают. А тех, кто не доказывает, осаживают.
Что такое ССС?
Cartesian closed category
Reply
Ну т.е. это на совести людей, тут также. Хотя в Агде я могу потребовать именно морфизмов монад со всеми доказательствами.
Reply
Reply
Reply
Leave a comment