Documente Academic
Documente Profesional
Documente Cultură
Categorii1
7 decembrie 2017
1
bazat pe Categories for programmers
Ioana Leus, teanTraian Florin S, erbanut,a (UNIBUC) PDMeta-Programare 7 decembrie 2017 1/9
Categorii s, i Functori
Categorii s, i Functori
Ioana Leus, teanTraian Florin S, erbanut,a (UNIBUC) PDMeta-Programare 7 decembrie 2017 2/9
Categorii s, i Functori
Categorii
O categorie C este data de:
O clasa |C| a obiectelor
Pentru oricare doua obiecte A , B |C|,
o mult, ime C(A , B ) a saget, ilor de la A la B
f C(A , B ) poate fi scris ca f : A B
Pentru orice obiect A o sageata id A : A A numita identitatea lui A
Pentru orice obiecte A , B, C, o operat, ie de compunere a saget, ilor
: C(B , C ) C(A , B ) C(A , C )
Bartosz Milewski
Category: The
Essence of Composi-
tion
Compunerea este asociativa s, i are element neutru id
Ioana Leus, teanTraian Florin S, erbanut,a (UNIBUC) PDMeta-Programare 7 decembrie 2017 3/9
Categorii s, i Functori
Ioana Leus, teanTraian Florin S, erbanut,a (UNIBUC) PDMeta-Programare 7 decembrie 2017 4/9
Categorii s, i Functori
Obiectele: tipuri
Saget, iile: funct, ii ntre tipuri
f : : A > B
Ioana Leus, teanTraian Florin S, erbanut,a (UNIBUC) PDMeta-Programare 7 decembrie 2017 5/9
Categorii s, i Functori
Exemple
Liste obiecte: tipuri de forma [a]
Optiuni obiecte: tipuri de forma Maybe a
Arbori obiecte: tipuri de forma Arbore a
Comenzi I/O obiecte: tipuri de forma IO a
Funct, ii de sursa t obiecte: tipuri de forma t -> a
Ioana Leus, teanTraian Florin S, erbanut,a (UNIBUC) PDMeta-Programare 7 decembrie 2017 6/9
Categorii s, i Functori
De ce categorii?
Ioana Leus, teanTraian Florin S, erbanut,a (UNIBUC) PDMeta-Programare 7 decembrie 2017 7/9
Categorii s, i Functori
Functori
Bartosz Milewski
Functors
Ioana Leus, teanTraian Florin S, erbanut,a (UNIBUC) PDMeta-Programare 7 decembrie 2017 8/9
Categorii s, i Functori
Functori n Haskell
n general un functor F : C D este dat de
O funct, ie F : |C| |D| de la obiectele lui C la cele ale lui D
Pentru orice A , B |C|, o funct, ie F : C(A , B ) D(F (A ), F (B ))
Compatibila cu identitat, ile s, i cu compunerea
F (id A ) = id F (A ) pentru orice A
F (g f ) = F (g ) F (f ) pentru orice f : A B , g : B C, h = g f
n Haskell o instant, a Functor m este data de
Un tip m a pentru orice tip a (deci m trebuie sa fie tip parametrizat)
Pentru orice doua tipuri a s, i b, o funct, ie
fmap : : ( a > b ) > (m a > m b )