Czy ktoś może wyjaśnić w prosty sposób różnicę między tymi dwoma? Nie rozumiem w pełni roli, w której monady są endofunktorami, a nie są tylko funktorami.Różnice między funktorami a endofunktami
Odpowiedz
Funktor może przejść z jednej kategorii do innej, endofunktor jest funktorem, dla którego kategoria początkowa i docelowa są takie same.
Tak samo, jak z endomorfizmem a morfizmami.
Dlaczego monady muszą być endofunkturami?
Istnieje słynny cytat, że "Monady to tylko monoidy w kategorii endofunktorów". Na szczęście ktoś inny wyjaśnił już to dość dobrze: in this answer.
Kluczową kwestią, dla której monada musi być endofunktorem, jest to, że join
, jak nazywa się w Haskell, lub µ
, jak to zwykle nazywane jest w teorii kategorii, jest częścią definicji¹ monady. Teraz
Prelude Control.Monad> :t join
join :: Monad m => m (m a) -> m a
więc wynikiem stosowania funktor m
do obiektu (w HASK, kategorii typów Haskell jak obiekty i funkcje morfizmów, typ) musi być obiekt, który m
można ponownie zastosować do. Oznacza to, że musi należeć do kategorii, która jest domeną funktora m
.
Funktor może być złożony ze sobą, jeśli jego domena i kodomena są takie same [ściśle, jeśli jej kodomena jest podkategorią jej domeny], innymi słowy, jeśli jest to endofunktor. Ponieważ kompozycie ze sobą jest częścią definicji monady, monady są a fortoforami endofunktur.
¹ Jedna definicja, alternatywnie można zdefiniować monadę za pomocą (>>=)
lub bind
i mieć join
jako właściwość pochodną.
- 1. Różnice między GWT a Vaadin
- 2. Różnice między logiem a rejestratorem?
- 3. Różnice między NCQRS a Lokad.CQRS
- 4. Jakie są różnice między postem a stroną
- 5. różnice między diagramem komponentów a schematem pakietów
- 6. Różnice między przetwarzaniem strumienia a przetwarzaniem wiadomości
- 7. Jakie są różnice między przerwą a wyjściem?
- 8. Jakie są różnice między MPI a OpenMP?
- 9. Różnice między hash a listami w R
- 10. Różnice między dokumentem a dokumentem $ w Angular
- 11. Różnice między literałem regexp JavaScript a konstruktorem
- 12. Jakie są różnice między typedef a używaniem?
- 13. Jakie są różnice między programem a aplikacją?
- 14. Różne różnice między lokalnym a zdalnym
- 15. Różnice w tygodniach między PHP a MySQL
- 16. różnice między właściwościami stereotypów a wartościami znaczników
- 17. Różnice kolorów między obrazami a html
- 18. Dlaczego uzyskiwać różnice między XCode a Xcodebuild?
- 19. Różnice między schematem pryzmatycznym a clojure.spec
- 20. Różnice między TAK/PRAWDA?
- 21. różnice między elementami macierzy
- 22. Różnice między językiem programowania systemów a językami programowania aplikacji
- 23. Jakie są różnice między java 1.5 a java 1.6
- 24. Różnice między IntelliJ IDEA 13 a Androidem Studio
- 25. Połączenie HTTP, różnice między Androidem 2.3 a 4
- 26. Różnice między programem Guile a standardowym (w Racket IDE)?
- 27. C# Różnice w cenie między zdarzeniem DoubleClick a zdarzeniem MouseDoubleClick
- 28. * Subtelne * Różnice między funkcjami VB a funkcjami Convert.To *?
- 29. Jakie są różnice między widokiem snapshot a widokiem dynamicznym?
- 30. Jakie są różnice między & a &&, | i || w R?
Czy są jakieś funktory w Haskell, które nie są endofunkturami? (Czy nie wszystkie mapują Hask do Hask?) – huon
Dobrze, wszystkie funktory Haskella są endo. –
Non-endofunktory są dostępne w pakietach takich jak http://hackage.haskell.org/packages/archive/categories/1.0/doc/html/Control-Categoryical-Functor.html – sdcvvc