如何避免在使用合成

时间:2015-05-28 23:50:22

标签: haskell syntastic

我正在尝试在Haskell中编写一个模块。它没有main因为它不是一个独立的程序。

我刚刚开始使用syntastic,并且不断报道:

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

这可以防止它报告我的模块中的其他实际错误。如果我尝试通过添加虚拟主体来解决这个问题,它会开始抱怨所有其他内容都是“已定义但未使用”。

我怎样才能判断出不应该是main的词条(以及它在幕后使用的任何检查器)?

2 个答案:

答案 0 :(得分:28)

使用ghc-mod进行测试(支持合成,但也可以使用hdevtools):

$ 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认为你只是导出模块中的所有内容,因为所有内容都是从模块中隐式导出的。

答案 1 :(得分:1)

尽管回答晚了,但是为了完整起见,添加以下内容将停止警告。

main :: IO ()
main = return ()