web-dev-qa-db-fra.com

Comment éviter que "" principal "ne soit pas défini dans le module" Principal "" lors de l'utilisation de syntaxe

J'essaie d'écrire un module en Haskell. Il n'a pas de main car il n'est pas censé être un programme autonome.

Je viens de commencer à utiliser la syntaxe, et elle rapporte constamment:

The IO action ‘main’ is not defined in module ‘Main’

Cela l'empêche de signaler d'autres erreurs réelles dans mon module. Si j'essaie de contourner ce problème en ajoutant un fichier factice, il commence à se plaindre que tout le reste est "défini mais non utilisé".

Comment puis-je dire à Syntastic (et à tout vérificateur qu'il utilise sous les couvertures) qu'il n'y a pas de main?

26

Tester avec ghc-mod (Qui soutient la syntaxe, bien que hdevtools soit également possible):

$ cat test1.hs
f :: Int -> Int
f x = x + 1
$ ghc-mod check test.hs
test1.hs:1:1:The IO action 'main' is not defined in module 'Main'
$ cat test2.hs
module Test where

f :: Int -> Int
f x = x + 1
$ ghc-mod check test.hs
$

Vous pouvez donc simplement mettre une déclaration de module factice dans votre fichier et l'avertissement disparaîtra.

La raison pour laquelle cet avertissement apparaît est que par défaut dans Haskell, tout module non déclaré porte le nom Main. Puisque vous n'avez pas défini de main :: IO () et que le nom du module est implicitement Main ghc-mod lance un avertissement. Si vous le déclarez autre chose que Main, ghc-mod pense que vous exportez tout simplement dans le module, puisque tout est implicitement exporté depuis un module.

29
bheklilr

Bien qu'il soit tardif de répondre, pour terminer, l'ajout de ce qui suit arrêtera l'avertissement.

main :: IO ()
main = return ()
1
RussellB