Size: a a a

Теория категорий

2019 September 24

KV

Kirill Valyavin in Теория категорий
contramap f g == g . f
источник

AZ

Alex Zhukovsky in Теория категорий
а, ну да. Звучит логично
источник

AZ

Alex Zhukovsky in Теория категорий
спасибо, вроде стало понятнее
источник

к

кана in Теория категорий
потенциально, имея некий Pipe a b, который на вход принимает a и на выходе отдает b (
push : Pipe a b -> a -> IO ()
pop : Pipe a b -> IO b
)
то мапать первый аргумент (вход) нужно именно через (x -> a), а выход уже (b -> x)

этот пример потом когда-нибудь поможет с профункторами

другой пример (который является обобщением примера с предикатами выше) - профунктор hom(-, -), или для какого-нибудь объекта X, функтор hom(-, X) (например в категории типов хаскеля, при X = Bool, получаем функтор предикатов)
источник

KV

Kirill Valyavin in Теория категорий
Сообщения @kana_sama надо приходить перечитывать на следующий день, пока все правки внесёт...
источник

к

кана in Теория категорий
это правда
источник

Oℕ

Oleg ℕizhnik in Теория категорий
Alex Zhukovsky
как из b -> a -> (ga -> gb) можно получить что-то полезное?
примеры контравариантных тупеклассов io.circe.Encoder, cats.Show, tofu.Loggable
как минимум можно легко сконструировать инстанс
источник

AZ

Alex Zhukovsky in Теория категорий
Просто у меня в голове ко-контр вариантность связаана исключительно с сабтайпингом на генериках, и она про то, что T<A> : T<B> если A : B (и наоборот). А что оно означает без сабтайпинга как-то непонятно.
источник

Oℕ

Oleg ℕizhnik in Теория категорий
но это не для этого чата разговор
источник

Oℕ

Oleg ℕizhnik in Теория категорий
это контравариантность для двух разных категорий
источник

Oℕ

Oleg ℕizhnik in Теория категорий
в одной морфизмы - функции, в другой отношения субтайпинга между типами
источник

AZ

Alex Zhukovsky in Теория категорий
Hm, this makes sense
источник

AZ

Alex Zhukovsky in Теория категорий
видимо я слишком привык думать именно в этих терминах, а он более общий оказывается. Спасибо, вроде стало понятнее
источник

SK

Slava Karkunov in Теория категорий
Контрвариантность это просто разворот стрелки функтором. Была a->b, станет Fb -> Fa.
По сути, она сводится к прекомпозиции. Как в примере с предикатами (b->a) o (a -> Bool) = (b -> Bool)
А ковариантность к композиции: (Bool->a) o (a -> b) = (Bool -> b).
источник

AZ

Alex Zhukovsky in Теория категорий
я просто не понимаю, как функтор из a->b может сделать fb -> fa. С прямым функтором все просто, у тебя есть объект, возьми, раскрой внутреннюю структуру, сделай свою магию, запакуй обратно.

А с обратным, тебе дали функу из b -> a и внезапно тебе дали fa. Как ты отсюда получишь Fb? А хз
источник

Oℕ

Oleg ℕizhnik in Теория категорий
Alex Zhukovsky
я просто не понимаю, как функтор из a->b может сделать fb -> fa. С прямым функтором все просто, у тебя есть объект, возьми, раскрой внутреннюю структуру, сделай свою магию, запакуй обратно.

А с обратным, тебе дали функу из b -> a и внезапно тебе дали fa. Как ты отсюда получишь Fb? А хз
в scala для любого контравариантного генерика без тайпемберов ты можешь объявить инстанс контравариантного функтора
все потребители, кодеры и т.п.
попробуй, у тебя получится
источник

к

кана in Теория категорий
Alex Zhukovsky
я просто не понимаю, как функтор из a->b может сделать fb -> fa. С прямым функтором все просто, у тебя есть объект, возьми, раскрой внутреннюю структуру, сделай свою магию, запакуй обратно.

А с обратным, тебе дали функу из b -> a и внезапно тебе дали fa. Как ты отсюда получишь Fb? А хз
"запаковать/распаковать" внутреннюю структуру это плохая интуиция, что скажешь про

newtype F a = forall r. F ((a -> r) -> r)


Или state s a = s -> (a, s)

?
источник

AZ

Alex Zhukovsky in Теория категорий
ну первую запись я не понимаю, а со второй так и есть. Берешь стейт, делаешь магию над ним, возвращаешь запакованный в новый стейт полученный объект
источник

Oℕ

Oleg ℕizhnik in Теория категорий
в Haskell тоже есть вторая категория констрейтов, тоже тонкая, но о ней реже вспоминают, но с появленинием quantified constraints в ней тоже можно начать объявлять ко/контра вариантные эндофункторы
источник

к

кана in Теория категорий
Alex Zhukovsky
ну первую запись я не понимаю, а со второй так и есть. Берешь стейт, делаешь магию над ним, возвращаешь запакованный в новый стейт полученный объект
Ну мы не берём стейт, у нас там только функция.
источник