Per quanto ho capito, un functor è una mappatura tra due categorie, ad esempio da oggetti in C http://mathurl.com/32qch9w.png a oggetti in D http://mathurl.com/36b8r37.png dove C http://mathurl.com/32qch9w.png e D http://mathurl.com/36b8r37.png sono categorie.In che modo i functor in Haskell sono correlati ai funtori nella teoria delle categorie?
In Haskell c'è Hask in cui gli oggetti sono tipi Haskell ei morfismi sono funzioni Haskell. Tuttavia, il tipo di classe Functor
dispone di una funzione che mappa fmap
tra questi tipi (che sono quindi gli oggetti e non categorie stessi):
fmap :: (a -> b) -> f a -> f b
f a
e f b
sono entrambi gli oggetti in Hask. Significa che ogni istanza di Functor
in Haskell è un endofunctor e, in caso contrario, Functor
rappresenta davvero un funtore?
Cosa mi manca qui? I tipi sono anche categorie in Haskell?
Si dice * le frecce di Hask compatibili con il mapping di oggetti 'F' *. È una sottocategoria di Hask? –
@Zoidberg Yup, è la sottocategoria di Hask i cui oggetti sono i tipi il cui costruttore di tipo più esterno è 'F'. –
Ho capito bene: teoricamente questi endofuncori non devono necessariamente lavorare su tipi con tipo '* -> *', voglio dire che functor potrebbe mappare una funzione 'Int -> Char' per funzionare' String -> Double'. Come ho capito, in teoria i funtori lavorano su qualsiasi morfismo. Ma immagino che non sia troppo pratico. O sono completamente sbagliato qui? – dimsuz