Size: a a a

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

2019 October 08

SK

Slava Karkunov in Теория категорий
что-то слишком сложно о Reader’e написано.. Почему там пара стрелок вообще? Если действие Reader(A->B) имеет тип R->A->B.
источник

ЕО

Евгений Омельченко in Теория категорий
Потому что R->A->B это не well-typed в теоркате :)
источник

SK

Slava Karkunov in Теория категорий
а что там с типом будет то?
источник

SK

Slava Karkunov in Теория категорий
не понимаю в чем именно проблема. и что за пара стрелок?
источник

A

Aragaer in Теория категорий
ну вот если у меня есть какой-то функтор, который отправляет объекты в стрелки, то стрелки он должен отправить в "стрелки между стрелками"
источник

A

Aragaer in Теория категорий
в случае Reader, те стрелки, куда он отправляет объекты, имеют все общее начало
источник

NI

Nick Ivanych in Теория категорий
Вероятно, вот это немного разъяснит —
https://en.wikipedia.org/wiki/Hom_functor
Смотреть ковариантный hom-функтор.
И вот картинка на тему ковариантного hom-функтора —
https://bartoszmilewski.com/2015/07/13/from-lenses-to-yoneda-embedding/hom-functor/
источник

A

Aragaer in Теория категорий
то есть функтор ставит объекту А в соответствие не одну конкретную стрелку R->A, а отправляет A в множество всех стрелок R->A (которое обозначается Hom(R, A)).
источник

NI

Nick Ivanych in Теория категорий
Вот-вот.
источник

A

Aragaer in Теория категорий
попробую переварить
источник

NI

Nick Ivanych in Теория категорий
Ну и стрелку преобразует в отображение таких множеств.
источник

NI

Nick Ivanych in Теория категорий
Есть стрелка x->y
Есть стрелка zю->x — как её превратить в стрелку типа zю->y?
источник

A

Aragaer in Теория категорий
композицией
источник

NI

Nick Ivanych in Теория категорий
Её же можно провернуть для любой стрелки из zю->x?
источник

A

Aragaer in Теория категорий
ну да
источник

A

Aragaer in Теория категорий
то есть получается, чтобы Reader работал для какой-то стрелки X->Y, надо скормить стрелку A->X
источник

NI

Nick Ivanych in Теория категорий
Aragaer
то есть получается, чтобы Reader работал для какой-то стрелки X->Y, надо скормить стрелку A->X
"работал", это чтоб fmap работало? ;-)
источник

NI

Nick Ivanych in Теория категорий
Ну вот тут же всё понятно —
Что тут непонятно?
newtype Reader e a = Reader (e -> a)
instance Functor (Reader e) where  
   fmap f (Reader g) = Reader (\x -> f (g x))
В этой строчке, (Reader g) просто паттерн-матчит какую-то стрелку e->a.
Ну а потом, применяет это вот f.
Типов тут мало проставлено, то несложно самому вывести.
источник

A

Aragaer in Теория категорий
ну то есть "экземпляр" ридера зохавывает сразу e, a и стрелку между ними
источник

A

Aragaer in Теория категорий
а на одном e он не строится
источник