La matematica aveva bisogno di capire la teoria alla base del sistema di tipi di Haskell?


9

Di recente, sono diventato profondamente interessato a Haskell.

Mentre cerco di apprendere nuovi concetti (ad esempio la parola chiave forall e la monade ST ) e il sistema di tipi di Haskell in generale, mi imbatto continuamente in concetti tratti dalla teoria delle categorie e dal calcolo lambda . Quindi mi chiedo:

  1. Quali altri rami della matematica sono importanti per una forte comprensione del sistema di tipi di Haskell?

  2. Posso rinunciare a uno studio rigoroso di questi calcoli e concentrarmi invece su alcuni concetti pertinenti? (ad es. quantificatori nel calcolo lambda.) In caso affermativo, quali concetti sono essenziali?

Spero di raccogliere presto tipi e linguaggi di programmazione , tuttavia, ti preghiamo di suggerire eventuali risorse di lettura alternative che ritieni appropriate.


4
La teoria delle categorie non è essenziale per conoscere e lavorare con Haskell, ma può aiutare con alcuni concetti di base. L'unico vero ramo della matematica per capire questa roba è la teoria delle categorie, non è solo radicata lì, ma qui troverai poca dipendenza da altre matematiche, è un'area molto isolata in quel modo. Raccogli il calcolo Lambda e studia i diversi sistemi di tipo associati a diverse varietà di lambda, oltre a quello leggi questa risposta SO e leggi la teoria delle categorie.
Jimmy Hoffa,

3
Non sarei così preso dal padroneggiare il sistema di tipi sottostante. Almeno non lasciare che non sapere tutto ti impedisce di completare un paio di progetti. Il solo completamento di alcuni semplici progetti in Haskell mi ha permesso di vedere la bellezza matematica dietro di me e mi ha spinto a capirlo.
ChaosPandion,

2
@ChaosPandion Sono d'accordo con questo punto di vista, ma ho lavorato su un progetto che potrebbe richiedere la scrittura di codice nella STmonade. È difficile scrivere codice che verrà compilato quando non capisco tutte le firme dei tipi rilevanti, quindi ho ritenuto prudente migliorare la mia comprensione del sistema dei tipi.
Rob,

3
@robjb - Sono certamente d'accordo con te sul fatto che una comprensione più profonda sia prudente. Onestamente il mio commento è stato rivolto più al pubblico generale che potrebbe trovare Haskell troppo intimidatorio per persino provare.
ChaosPandion,

Risposte:


11

No, non è necessario prendere un libro sulla teoria delle categorie per capire Haskell.

Uso Haskell da alcuni anni e ho raccolto alcune teorie di categoria per curiosità, non è davvero necessario. Da un lato, è bello vedere come tutte queste astrazioni si adattino al "quadro generale", ma non sono andato "Oh mio Dio, ho solo bisogno di renderlo un profunctor dalla Maybecategoria a se []poi posso salvare il Principessa!".

Ora dipende da cosa stai facendo con la teoria dei tipi di Haskell.

Se stai solo imparando haskell non andare a cercare di capire ogni sfumatura del sistema di tipi . Per favore, non è come provare prima a imparare la meta-programmazione del modello C ++. I tipi di fantasia sono strumenti eccellenti, ma avere una buona comprensione della programmazione funzionale batte la comprensione del polimorfismo impredicativo.

Ora diciamo che dopo un anno o due di Haskell stai cercando di capire ogni sottile pezzo di come funziona il sistema di tipi di Haskell, quindi sì, qualche teoria dei tipi potrebbe essere utile.

Ti aiuterà a comprendere alcune delle logiche alla base di come funzionano le cose, in più è francamente un ramo davvero interessante dell'IMO di informatica che vale la pena guardare. Puoi scegliere le parti che ti interessano e imparare ancora una quantità decente.

Per Haskell, guardando STLC, sistemi di tipo HM (System F) e forse il cubo lambda (Haskell è System Fw iirc) e tipi iso-ricorsivi. Tipi e linguaggi di programmazione è una grande risorsa per iniziare e copre tutto questo e molto altro.

Se vuoi davvero bere il cool-aid e scoprire che sei un teorico in erba, vai a cercare Agda o Coq. Questi presentano "tipi dipendenti", un passo più avanti nel cubo lambda rispetto a Haskell. I tipi dipendenti consentono ai tipi di dipendere dai termini. Ciò significa che i tipi sono abbastanza potenti per dimostrare effettivamente i teoremi. Per il curioso, googling "curry howard isomorphism" dovrebbe portare alcuni risultati interessanti.


Sarebbe utile una breve descrizione di Agda e Coq.
ChaosPandion,

@ChaosPandion Aggiornato
Daniel Gratzer il

Questo sembra buono. Ho pensato solo che i nomi non sarebbero bastati a suscitare l'interesse di molte persone.
ChaosPandion,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.