2009-04-29 18 views
75

Mentre sto imparando Haskell, vedo che c'è un sacco di language extensions usato nel codice della vita reale. Come principiante, dovrei imparare a usarli o dovrei evitarli a tutti i costi? Vedo che rompe la compatibilità con Haskell   98 e limita il codice solo a quasi GHC. Tuttavia, se sfoglio i pacchetti su Hackage, vedo che molti di loro sono comunque solo GHC.Devo usare le estensioni Haskell GHC o no?

Quindi, qual è l'atteggiamento della comunità nei confronti dell'estensione della lingua?

E se l'uso di estensioni è OK, come posso distinguere le estensioni che posso utilizzare “in modo sicuro” (quelli che rischiano di diventare parte della prossima serie Haskell) da quelli che sono per lo più “sperimentale”? Ad esempio, suppongo che -XDisambiguateRecordFields sia bello e utile, ma è probabile che sia supportato in futuro?

+0

Io personalmente non mi preoccupo di questo compatibilità; GHC è così buono che è mainstream - anche per le persone che semplicemente rifiutano di conformarsi a un mainstream (Haskellers). – MasterMastic

risposta

69

Ci sono alcune estensioni GHC troppo buone per vivere senza. Tra i miei preferiti sono i tipi

  • multiparametrica classi di tipo
  • variabili di tipo con ambito
  • superiore rango
  • tipi di dati algebrici generalizzati (GADTs)

Di questi quello davvero essenziale è multiparametrica classi di tipo.

Alcune estensioni GHC sono molto speculative e sperimentali e si consiglia di utilizzare con cautela. Un buon modo per identificare un'estensione stabile e attendibile è vedere se è previsto per l'inclusione in Haskell Prime, che si spera di essere il successore di Haskell 98.

I secondo suggerimento di Don Stewart che ogni estensione dovrebbe essere contrassegnata utilizzando il LANGUAGE pragma nel file sorgente. Non abilitare le estensioni utilizzando le opzioni della riga di comando.

+2

Grazie! Eviterò le opzioni della riga di comando per abilitare le estensioni. – sastanin

+0

Non riesco a immaginare di non avere classi di tipo multiparametrico o tipi di classifica più alti .. – alternative

+6

Questa risposta non dovrebbe essere aggiornata per Haskell 2010? – Henrik

19

In genere le persone utilizzano le estensioni GHC in modo piuttosto pesante, perché sono così utili e Haskell 98 è piuttosto vecchio. Una volta che c'è una persona più aggiornata, le persone possono fare più sforzi per attenervisi.

È possibile trovare lo stato delle proposte per il prossimo standard here.

+0

Grazie per la risposta e per il collegamento. Suppongo che la proposta respinta sia da evitare. – sastanin

+0

Beh, ci può essere una gamma abbastanza ampia di motivi per il rifiuto, quindi se si vuole veramente usare qualcosa, approfondire un po 'i dettagli. Ma è una buona regola empirica. –

51

Sì, utilizzare le estensioni appropriate.

Ma assicuratevi di abilitarli intenzionalmente - solo quando decidete di averne bisogno. Esegui su base per modulo tramite {-# LANGUAGE Rank2Types #-} (ad esempio).

4

Le altre risposte qui sono buone. Aggiungo che le estensioni GHC non sono come vulnerabili in futuro (*) come potrebbero essere, perché GHC sembra essere di gran lunga il compilatore Haskell più popolare, e non vedo che cambierà presto.

(*) come nel contrario di "a prova di futuro"