web-dev-qa-db-ja.com

syntasticを使用する際に「メイン」がモジュール「メイン」で定義されていないことを回避する方法

Haskellでモジュールを書こうとしています。スタンドアロンのプログラムではないため、mainはありません。

私はsyntasticを使い始めたばかりで、常にレポートしています:

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

これにより、モジュール内の他の実際のエラーが報告されなくなります。ダミーのメインを追加してこれを回避しようとすると、他のすべてが「定義されているが使用されていない」という不満が出始めます。

mainがないはずであることをsyntastic(およびそれがカバーの下で使用しているチェッカー)にどのように伝えることができますか?

26

_ghc-mod_を使用したテスト(hdevtoolsも可能ですが、syntasticをサポートします):

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

したがって、ファイルにダミーのモジュール宣言を置くだけで、警告は消えます。

この警告がポップアップする理由は、Haskellではデフォルトで宣言されていないモジュールの名前がMainであるためです。 main :: IO ()を定義しておらず、モジュール名が暗黙的にMainであるため、ghc-modは警告をスローします。 Main以外のものとして宣言すると、ghc-modは、モジュールからすべてが暗黙的にエクスポートされるため、モジュール内のすべてをエクスポートしていると見なします。

29
bheklilr

回答は遅いですが、完了のために以下を追加すると警告が停止します。

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