Ответ 1
Тестирование с помощью 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 думает, что вы просто экспортируете все в модуль, так как все неявно экспортируется из модуля.