Czy wszystkie funktory Haskella są endofunktorami?

Jestem trochę zdezorientowana i potrzebuję kogoś, kto mnie wyprostuje. Pozwala zarysować moje obecne zrozumienie:

Gdzie E jest endofunktorem, a {[2] } jest jakąś kategorią:

E : A -> A.

Ponieważ wszystkie typy i morfizmy w Haskell są w Haskkategorii, czy nie jest functorW Haskell również endofunctor? F : Hask -> Hask.

Mam dobre przeczucie, że się mylę i jakoś to upraszczam. chciałbym, żeby ktoś mi powiedział, jakim jestem idiotą. Dzięki.
Author: Andrey Tyukin, 2010-07-18

3 answers

Możesz chcieć wyjaśnić, czy pytasz o "funktory w Haskell", czy Functor s. nie zawsze jest jasne, jaką kategorię przyjmuje się, gdy pojęcia teorii kategorii są używane w Haskell.

Ale tak, domyślnym założeniem jest Hask , który jest brany za kategorię typów Haskella z funkcjami jako morfizmami. W takim przypadku endofunktor F na Hask odwzorowywałby dowolny typ A na typ F(A) i dowolną funkcję F pomiędzy dwoma typami a i B na funkcję F (f) pomiędzy niektórymi typami F (A) i F (B).

Jeśli ograniczamy się tylko do tych endofunktorów, które mapują dowolny typ a do typu (f a) Gdzie f jest konstruktorem typu z typem * -> *, to możemy opisać powiązaną mapę funkcji jako funkcję wyższego rzędu z typem (a -> b) -> (f a -> f b), która jest oczywiście klasą typu o nazwie Functor.

Można jednak łatwo wyobrazić sobie dobrze zachowujące się endofunkcje na Hask, które nie mogą być zapisane (bezpośrednio) jako instancja Functor, np. funkcja odwzorowująca typ a na Either a t. I choć oczywiście nie ma większego sensu w funktorze od Hask do jakiejś innej kategorii, rozsądne jest rozważenie (kontrawariantnego) funktora od Hask do Haskop .

Poza tym, instancje Functor muszą mapować z całej kategorii Hask na pewien jej podzbiór, który zatem również tworzy kategorię. Ale warto też mówić o funkcjach pomiędzy podzbiorami Hask. Na przykład, rozważmy funktor, który wysyła typy Maybe a do [a].

Możesz chcieć zapoznać się z category-extras pakiet , który dostarcza pewne struktury inspirowane teorią kategorii osadzone w Hask zamiast zakładać całość.

 33
Author: C. A. McCann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-17 22:13:25

Nawet jeśli ostatecznie manipulujesz Hask, istnieje wiele innych kategorii, na których można zbudować Hask, które mogą mieć znaczenie dla danego problemu:

  • Hask^op, czyli Hask ze wszystkimi strzałkami odwróconymi
  • Hask * Hask, funktory na niej to bifunktory
  • kategorie przecinków, czyli obiekty są morfizmami do stałego obiektu a, morfizmy są trójkątami przemiennymi
  • kategorie funkcyjne, morfizmy są naturalne transformacje
  • kategorie algebry
  • kategorie Monoidalne
  • Kleisli kategorie
  • ...

Pobierz kopię kategorii Mac Lane dla pracującego Matematyka , aby mieć definicje, i spróbuj znaleźć samodzielnie problem, który rozwiązują w Haskell. Szczególnie dotyczy to funktorów adjoint (które są obiektami początkowymi/końcowymi w odpowiedniej kategorii) oraz ich relacji z monadami.

Zobaczysz, że nawet jeśli jest jeden duży category (Hask, a może " Podnoszone obiekty z Hask z prawej strzałki / products/...", która zawiera w sobie wybory językowe Haskella, takie jak np. nieścisłość i lenistwo), właściwe kategorie pochodne są wyraziste.

 13
Author: Alexandre C.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-19 15:10:04

Prawdopodobnie istotna (a przynajmniej interesująca) dyskusja dotycząca monad znajduje się w artykule "monady nie muszą być endofunktorami":

Http://www.cs.nott.ac.uk/ ~ txa / publ / Relative_Monads. pdf

 7
Author: Gian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-17 22:30:33