Si consiglia di chiarire se si sta chiedendo di "functors in Haskell", o Functor
s. Non è sempre chiaro quale categoria viene assunta quando i termini della Teoria delle Categorie sono usati in Haskell.
Ma sì, l'ipotesi di default è Hask, che è considerata la categoria dei tipi Haskell con funzioni come morfismi. In tal caso, un endofunctor F su Hask mapperebbe qualsiasi tipo A a un tipo F (A) e qualsiasi funzione f tra due tipi A e B a una funzione F (f) tra alcuni tipi F (A) e F (B).
Se poi limitiamo ai soli endofunctors che mappano qualsiasi tipo a
a un tipo (f a)
dove f
è un tipo di costruzione con gentile * -> *
, allora è possibile descrivere la mappa associata per funzioni come una funzione di ordine superiore di tipo (a -> b) -> (f a -> f b)
, che è ovviamente la classe di caratteri chiamata Functor
.
Tuttavia, si può facilmente immaginare endofunctors beneducati su Hask che non può essere scritto (direttamente) come esempio di Functor
, ad esempio un functor mappatura di un tipo a
a Either a t
. E mentre non c'è ovviamente molto senso in un funtore dalla Hask di qualche altra categoria del tutto, è ragionevole considerare un (controvariante) funtore da Hask a Haskop.
Oltre a ciò, le istanze di Functor
necessariamente mappano dall'intera categoria Hask su un sottoinsieme di esso che, quindi, forma anche una categoria. Ma è anche ragionevole parlare dei funtori tra sottoinsiemi di Hask. Ad esempio, si consideri un funtore che invia i tipi Maybe a
a [a]
.
È possibile consultare lo category-extras
package, che fornisce alcune strutture ispirate alla teoria di categorie incorporate all'interno di Hask invece di assumerne la totalità.
fonte
2010-07-17 22:13:25
C'è qualche parola mancante prima di "Dove' E' ... "? – kennytm