MonadSum

Oct 05, 2012 21:54

Подумалось мне про трансформеры монад, что если у нас есть натуральные преобразования из монад m и n в некую монаду l, то l - это их сумма, если добавить ещё и обратную функцию. Т.е. при наличии натурального преобразования m => t и n => t можем получить и m+n => t.

Попробовал я это представить прямо в таком виде:

data MonadSum m n a = MonadSum ( Read more... )

monad, fp, теория категорий, haskell

Leave a comment

Comments 14

beroal October 6 2012, 15:53:23 UTC
Что-то ваше instance Monad (MonadSum m n) жутко похоже на instance Monad (ReaderT r m). Сравните здесь.

Reply

voidex October 6 2012, 16:55:41 UTC
Ну да, похоже на ReaderT от forall t. (forall a. m a -> t a, forall a. n a -> t a).

Reply


beroal October 7 2012, 07:39:52 UTC
Ваши функции типов forall b. m b -> t b, forall c. n c -> t c - это морфизмы монад или что?

Reply

voidex October 7 2012, 18:28:30 UTC
Да, морфизм монад:

lift : m => t -- натуральное преобразование

при этом, как я понимаю, должны выполняться:

return = lift . return
join . lift . map lift = lift . join

Ко мне можно на ты

Reply

beroal October 9 2012, 18:44:44 UTC
Пока что я не вижу, какое отношение MonadSum m n имеет к сумме в категории монад и морфизмов монад. И не уверен, что сумма всегда существует.

Reply

voidex October 9 2012, 20:35:38 UTC
У нас есть морфизмы n => MonadSum n m и m => MonadSum n m, и при наличии n => t и m => t можем построить MonadSum n m => t

Точно так же можно представить Either:

data Either a b = Either {
either :: forall c. (a -> c) -> (b -> c) -> c }

Или я несу чушь?

Reply


nivanych May 7 2013, 07:01:19 UTC
> натуральные преобразования

Это ты зря. На русском так никто не говорит.
Правильно - "естественные преобразования".

Reply

voidex May 7 2013, 09:09:48 UTC
Ок :)

Reply


Leave a comment

Up