Domanda

Cabal è mi dà messaggi contrastanti. Quando dico:

Extensions: DeriveFunctor

Si dice:

Warning: Unknown extensions: DeriveFunctor

Ma quando dico:

GHC-Options: -XDeriveFunctor

Si dice:

Warning: Instead of 'ghc-options: -XDeriveFunctor' use 'extensions:
DeriveFunctor'

Per ora sto solo andando a utilizzare il pragma {-# LANGUAGE DeriveFunctor #-}.

$ cabal --version
cabal-install version 0.8.2
using version 1.8.0.6 of the Cabal library 
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 6.12.3
$ basename $(mdfind haskell-platform | grep .dmg)
haskell-platform-2010.2.0.0.i386.dmg
È stato utile?

Soluzione

Secondo il Hackage documentazione , come di Cabal-1.8.0.6 DeriveFunctor non viene riconosciuto. Si tratta di una relativamente nuova aggiunta alla GHC e non sembra avere largo uso, quindi non mi sorprende che sarebbe stato trascurato per Cabal. Questo dovrebbe probabilmente essere presentata come un bug (richiesta di funzionalità?) Contro Cabal.

@ Tom Lokhorst è giusto che un pragma lingua è l'opzione migliore. Non mi piace utilizzando il campo Estensioni di Cabal perché poi tutte le estensioni sono attivi per tutti i moduli, che io spesso non vogliono.

Altri suggerimenti

È ancora possibile utilizzare extensions: DeriveFunctor nel file .cabal. Sì, non è un'estensione che è attualmente noto per Cabal, ma è ancora possibile utilizzarlo e fintanto che il compilatore riconosce allora funzionerà. Infatti Cabala controllerà che il compilatore fa riconoscere l'estensione, anche se Cabal non si sa su di esso.

C'è un registro centrale delle estensioni nel Language.Haskell.Extension modulo. Lo scopo di questo registro è così che i diversi compilatori possono concordare gli stessi nomi quando attuano le stesse estensioni. Abbiamo avuto casi in passato in cui gli autori di diversi compilatori hanno accidentalmente dato nomi diversi per lo stesso concetto di estensione. Non tutte le estensioni devono essere registrati. Ha senso di non registrare le estensioni che sono ancora altamente sperimentale, ad esempio le estensioni DPH "Parr" non è ancora registrato. Hackage richiede tutti i pacchetti caricati per utilizzare solo conosciuti estensioni registrate, che ha senso poiché se un interno è sufficientemente pronto per essere utilizzato in un pacchetto distribuito, allora è ok per la registrazione.

In questo caso particolare, gli sviluppatori GHC sembrano aver dimenticato di registrare l'estensione.

È anche interessante notare che dal Cabal-1,10 campo extensions è essere divisa in due: default-extensions e other-extensions. Questo indirizzi la questione che Giovanni fa notare nella sua risposta, che il comportamento precedente è che tutte le estensioni sono attivi per tutti i moduli, che noi riconosciamo è un errore. Il campo other-extensions consente le estensioni utilizzate in alcuni moduli (cioè con il pragma LANGUAGE) per essere elencati. Cabal finirà per applicare che sono tutti elencati, proprio come è necessario che tutte le dipendenze dei pacchetti sono elencati. dipendenze linguistiche sono dipendenze troppo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top