Question

Cabal me donne des messages contradictoires. Quand je dis:

Extensions: DeriveFunctor

Il dit:

Warning: Unknown extensions: DeriveFunctor

Mais quand je dis:

GHC-Options: -XDeriveFunctor

Il dit:

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

Pour l'instant je vais juste utiliser le 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
Était-ce utile?

La solution

Selon le Hackage documentation , au DeriveFunctor Cabal-1.8.0.6 est pas reconnu. Il est un ajout relativement nouveau pour GHC et il ne semble pas avoir une large utilisation, donc je ne suis pas surpris qu'il aurait été négligé pour Cabal. Cela devrait probablement être déposé comme un bug (demande de fonctionnalité?) Contre Cabal.

est juste Lokhorst @ Tom qu'une pragma de langue est la meilleure option. Je n'aime pas utiliser le champ Extensions de Cabal car alors toutes les extensions sont actifs pour tous les modules, que je ne veux pas souvent.

Autres conseils

Vous pouvez toujours utiliser extensions: DeriveFunctor dans votre fichier .cabal. Oui, ce n'est pas une extension qui est actuellement connu pour Cabal, mais vous pouvez toujours l'utiliser et aussi longtemps que le compilateur reconnaît alors il fonctionnera. En effet Cabal vérifiera que le compilateur ne reconnaît l'extension, même si Cabal ne se sait pas.

Il y a un registre central des extensions du module Language.Haskell.Extension. Le but de ce registre est donc que les différents compilateurs peuvent se mettre d'accord sur les mêmes noms lorsqu'ils mettent en œuvre les mêmes extensions. Nous avons eu des cas dans le passé où les auteurs de différents compilateurs ont accidentellement donné des noms différents pour le même concept d'extension. Toutes les extensions doivent être enregistrées. Il est logique de ne pas enregistrer les extensions qui sont encore très expérimental, par exemple les extensions DPH « PARR » est toujours pas enregistré. Hackage exige que tous les paquets téléchargés à utiliser uniquement connus extensions enregistrées, ce qui est logique car si une extension est suffisamment prêt à être utilisé dans un package distribué, il est autorisé à vous inscrire.

Dans ce cas particulier, les semblent avoir oublié devs GHC pour enregistrer l'extension.

Il est également intéressant de noter que de Cabal-1.10 le champ extensions est divisé en deux: default-extensions et other-extensions. Cette aborde la question que John fait remarquer dans sa réponse, que le comportement précédent est que toutes les extensions sont actifs pour tous les modules, que nous reconnaissons est une erreur. Le champ other-extensions permet aux extensions utilisées dans certains modules (à savoir avec le pragma LANGUAGE) pour être énumérés. Cabal finira par appliquer qu'ils sont tous répertoriés, tout comme il exige que toutes les dépendances de package sont répertoriés. dépendances linguistiques sont des dépendances aussi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top