8

我有点像 Haskell 的初学者,我正在尝试使用堆栈来构建应用程序。

但是,stack build执行时给我链接器错误:

Linking .stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/sim-exe/sim-exe ...
[...]/.stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/libHSsim-0.1.0.0-EmdGqYS9bXF9VefempSPEG.a(Lib.o):(.text+0x98f5): undefined reference to `simzuEmdGqYS9bXF9VefempSPEG_Linter_lint_info'
[...]/.stack-work/dist/x86_64-linux/Cabal-1.22.4.0/build/libHSsim-0.1.0.0-EmdGqYS9bXF9VefempSPEG.a(Lib.o):(.data+0x5f0): undefined reference to `simzuEmdGqYS9bXF9VefempSPEG_Linter_lint_closure'
collect2: error: ld returned 1 exit status

查看标签告诉我它与此函数中的闭包有关:

lint :: String -> [LintError]
lint source = let
  handleParseError :: ParseError -> [LintError]
  handleParseError e = [LintError (fromSourcePos $ errorPos e) $ format e]
  in
    case parseSim source of
      (Left error) -> handleParseError error
      (Right prog) -> lintProgram prog

但是那里真的没有闭包吗?如果我lint

lint _ = []

它编译得很好。

我可以很好地执行stack ghci和玩弄完整的实现。lint为什么链接失败?

4

1 回答 1

8

正如 yuras 正确指出的那样,exposed-modules在 cabal 文件中添加模块可以解决问题。

于 2016-04-29T12:50:15.723 回答