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

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

beroal October 10 2012, 09:21:32 UTC
Чтобы доказать, что, например, liftL является морфизмом монад, надо иметь доказательство, что содержимое MonadSum m n a принимает только морфизмы монад, и взять его неоткуда. А без доказательств это просто кусок кода, который непонятно зачем нужен.

Кроме того, я имел в виду монады на произвольной категории, а у тебя CCC (и даже хуже), и именно благодаря этой дополнительной структуре получился трюк.

Reply

voidex October 10 2012, 10:20:54 UTC
Ну в Haskell и instance Monad тоже не монада.
Что такое ССС?

Reply

beroal October 14 2012, 08:12:34 UTC
Ну в Haskell и instance Monad тоже не монада.
Чего? Haskell, конечно, не требует доказательств, но люди обычно доказывают. А тех, кто не доказывает, осаживают.

Что такое ССС?
Cartesian closed category

Reply

voidex October 14 2012, 09:21:16 UTC
> Чего? Haskell, конечно, не требует доказательств, но люди обычно доказывают. А тех, кто не доказывает, осаживают.
Ну т.е. это на совести людей, тут также. Хотя в Агде я могу потребовать именно морфизмов монад со всеми доказательствами.

Reply

beroal October 15 2012, 09:01:19 UTC
Так как понимать «в Haskell instance Monad не монада»?

Reply

voidex October 15 2012, 10:53:57 UTC
Monad m не гарантирует, что m - монада, в той же степени, что и (Monad m, Monad n) не гарантирует, что (forall a. m a -> n a) - морфизм монад.

Reply


Leave a comment

Up