Подтвердить что ты не робот

Как избежать "main" не определяется в модуле "Main" при использовании синтаксического

Я пытаюсь написать модуль в Haskell. Он не имеет main, потому что он не предназначен для автономной программы.

Я только начал использовать синтаксис, и он постоянно сообщает:

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

Это не позволяет сообщать о других реальных ошибках в моем модуле. Если я попытаюсь обойти это, добавив фиктивный основной, он начнет жаловаться, что все остальное - "Определено, но не используется".

Как я могу сказать, что синтаксис (и любой контролер, который он использует под обложками), не должен быть main?

4b9b3361

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

Ответ 2

Несмотря на то, что уже поздно отвечать, ради завершения добавление следующего остановит предупреждение.

main :: IO ()
main = return ()