Здесь есть две проблемы. Во-первых, значением по умолчанию для other-modules
в hpack
является «все модули в source-dirs
, кроме main
и модулей, упомянутых в предложении when
». Если вы посмотрите на сгенерированный файл .cabal
, то увидите, что в результате этого значения по умолчанию каждый исполняемый файл неправильно включил модуль другого исполняемого файла в свой список other-modules
. Во-вторых, настройка main
дает исходный файл, который содержит основной модуль, но не меняет имя модуля, ожидаемого GH C, с Main
на что-либо другое. Следовательно, этот модуль по-прежнему должен называться module Main where ...
, а не module Client where...
, если только вы не добавите отдельно -main-is Client
GH C параметр.
Итак, я хотел бы посоветуйте изменить Client.hs
, чтобы сделать его модулем Main
:
-- in Client.hs
module Main where
...
, а затем явно указать other-modules: []
для обоих исполняемых файлов:
executables:
ObjectServer:
main: Main.hs
other-modules: []
source-dirs: app
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- ObjectServer
Client:
main: Client.hs
other-modules: []
source-dirs: app
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- ObjectServer
Это, кажется, работает в моем тестировании .