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