2011-10-19 25 views
11

Se scopro che qualcosa è un Monoid o Monad, ottengo tutto per utilizzare tutti i tipi di funzioni divertenti, come foldMap, sequence o anche mapM. Mi rendono feliceA cosa serve Control.Category?

Cosa ottengo se scopro che qualcosa è un Category? Ottengo qualcosa di divertente oltre a sovraccaricare id e (.)?

+4

Come per tutte le astrazioni, c'è un compromesso: o puoi fare un sacco di cose con loro, o scopri che molte cose sono esempi di esse. Le categorie vanno il più lontano possibile verso il "sacco di cose sono esempi di loro" lato del compromesso: dannatamente vicino a ogni idea matematica ha una categoria sottostante. Il prezzo che si paga per la terminologia comune tra tutte queste idee è che il semplice fatto di chiamare una categoria non fornisce molte informazioni. Se vuoi di più, devi aggirare gli aggettivi sulla parola: "categoria chiusa cartesion", o "categoria monoidale intrecciata", ecc. –

risposta

9

Ottengo qualcosa di divertente oltre a overloading id e (.)?

Beh, anche voi (dovrebbe) avere le leggi ad essi associati:

"identity/left" forall p . 
       id . p = p 
"identity/right"  forall p . 
       p . id = p 
"association" forall p q r . 
       (p . q) . r = p . (q . r) 

Come nota a margine: La ragione per cui non si ottiene che molte funzioni divertenti come mapM o foldMap è , che dire una cosa è una categoria in realtà sta dicendo molto poco a riguardo. Le funzioni più utili presumo sono quelli definiti nella Control.Category, che a volte rendere il codice più facile da leggere: >>> e <<<

+2

Addendum: "Wikipedia dice" che la teoria delle categorie era considerata "astrattezza generale" (in senso buono), perché è estremamente astratto. –

7

Control.Category è solo il lavoro a terra per Control.Arrow, ed è lì che si ottiene le funzioni divertenti da.