Kleisli + List

Mar 03, 2012 12:32

Возьмём Клейсли-категорию для монады Writer. Затем определим функтор такой, что
F(a) = 1 + a * F(a) -- список
F(f) = id + f * F(f)
  -- null -> null
  -- (x, xs) -> (f x, F(f) xs)
где + и * в F(f) - choose и parcomp

Но в таком случае, если я ничего не путаю, не соблюдается F(f . g) = F(f) . F(g)

Действительно, возьмём f, пишущий "f" и возвращающий свой ( Read more... )

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

Leave a comment

Comments 8

lomeo March 3 2012, 10:00:51 UTC
Определись - F - это функтор чего? Списка или Writer?

Если Writer, то F(f) [1,1,1] напишет один "f"
Если списка, то F(f).F(g) вернёт writer-ы, которые пишут "fg"

"fffggg" не будет ни в одном из случаев.

Reply

voidex March 3 2012, 11:39:31 UTC
F - списочный эндофунктор на Клейсли-категории для Writer.

Каждому a из Клейсли-категории ставит в соответствие [a]
Каждому морфизму a -w-> b ставит в соответствие [a] -w-> [b]
где a -w-> b - морфизм в Клейсли-категории.

Т.е. переводя на Hask:
map : (a -> Writer String b) -> [a] -> Writer String [b]
И вот как написать этот map, чтобы map f . map g === map (f . g)?

Reply

lomeo March 5 2012, 10:57:27 UTC
> Каждому морфизму a -w-> b ставит в соответствие [a] -w-> [b]

Что-то непонятно, у этой категории кодомен должен быть Writer a.

Насчёт Hask - какие типы у f и g?

Reply

voidex March 5 2012, 19:20:23 UTC
Я не спец в этих технологиях, поэтому расскажу на пальцах, как я это понимаю. Если неправильно понимаю, поправьте меня ( ... )

Reply


ex_juan_gan March 3 2012, 18:10:35 UTC
Хм, а откуда следует, что эндофунктор, определённый на основной категории, расширяется на категорию Клейсли?

F(a → Tb) |→ F(a) → T(F(b)) - не видно, почему бы так. Ну хотя бы коммутировать должен с Т.

Reply

voidex March 3 2012, 19:53:42 UTC
Так и не следует.

Просто map и mapM в терминах стрелок выглядят одинаково, что наталкивает на некую общность, но при этом первая - функтор, а вторая - нет. Ну да и чёрт бы с ней, но есть ли какая-то абстракция для mapM? Она почти как функтор, но вот закон не соблюдается.

Reply


migmit March 6 2012, 11:54:36 UTC
Если я правильно понимаю, то морфизмы категории Клейсли для такого функтора будут устроены так: a -w-> [b], то есть a -> Writer log [b] - что то же самое, что морфизмы категории Клейсли для монады ListT (Writer log).

То есть, то, что ты говоришь, означает, по сути, что монадический трансформер ListT - неправильный. Это - давно известный факт, и на Haskell wiki есть способы исправить его: http://www.haskell.org/haskellwiki/ListT_done_right для начала.

Reply

voidex March 6 2012, 12:15:25 UTC
Не очень понимаю ( ... )

Reply


Leave a comment

Up