How to avoid “‘main’ is not defined in module ‘Main’” when using syntastic

后端 未结 2 948
-上瘾入骨i
-上瘾入骨i 2021-02-05 03:08

I\'m trying to write a module in Haskell. It does not have a main because it\'s not meant to be a stand-alone program.

I just started using syntastic, and i

相关标签:
2条回答
  • 2021-02-05 03:52

    Testing with ghc-mod (which backs syntastic, although hdevtools is possible too):

    $ 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
    $
    

    So you can just put a dummy module declaration in your file and the warning will go away.

    The reason why this warning pops up is because by default in Haskell any undeclared module has the name Main. Since you haven't defined a main :: IO () and the module name is implicitly Main ghc-mod throws a warning. If you declare it to be something other than Main, ghc-mod thinks you're just exporting everything in the module, since everything is implicitly exported from a module.

    0 讨论(0)
  • 2021-02-05 03:58

    Though it is a late answer, for the sake of completion adding the following will stop the warning.

    main :: IO ()
    main = return ()
    
    0 讨论(0)
提交回复
热议问题