如何将库添加到 Haskell 项目中?

stu*_*420 0 haskell haskell-stack

我正在尝试编写一个合作伙伴模块,为此我想连接秒差距库。我将依赖项放在 package.yaml 中,但 parsec 仅在 Main.hs 中可见。

\n

我的包.yaml

\n
dependencies:\n- base >= 4.7 && < 5\n- parsec\nghc-options:\n- -Wall\n- -Wcompat\n- -Widentities\n- -Wincomplete-record-updates\n- -Wincomplete-uni-patterns\n- -Wmissing-export-lists\n- -Wmissing-home-modules\n- -Wpartial-fields\n- -Wredundant-constraints\n\nlibrary:\n  source-dirs: src\n  dependencies :\n    - parsec\n\nexecutables:\n  haskell-lab4-exe:\n    main:                Main.hs\n    source-dirs:         app\n    ghc-options:\n    - -threaded\n    - -rtsopts\n    - -with-rtsopts=-N\n    dependencies:\n    - haskell-lab4\n    - parsec\n\ntests:\n  haskell-lab4-test:\n    main:                Spec.hs\n    source-dirs:         test\n    ghc-options:\n    - -threaded\n    - -rtsopts\n    - -with-rtsopts=-N\n    dependencies:\n    - haskell-lab4\n
Run Code Online (Sandbox Code Playgroud)\n

项目的结构如下(它是使用创建的stack new)

\n
|-app\n|  \\- Main.hs\n|\n|-src\n|  \\-Parser\n|   |    \\-Myfile.hs <-- I need parsec in this file\n|   | \n|   |-Lib.hs\n|\n|-test\n
Run Code Online (Sandbox Code Playgroud)\n

错误:

\n
Could not find module \xe2\x80\x98Text.Parsec.String.Combinator\xe2\x80\x99\n    Perhaps you meant Text.Parsec.Combinator (from parsec-3.1.15.0)\n    Use -v (or `:set -v` in ghci) to see a list of the files searched for.\n
Run Code Online (Sandbox Code Playgroud)\n

Ben*_*Ben 5

您确定您不只是使用了错误的模块名称吗?

\n

阅读错误消息的这一部分:

\n
Could not find module \xe2\x80\x98Text.Parsec.String.Combinator\xe2\x80\x99\n    Perhaps you meant Text.Parsec.Combinator (from parsec-3.1.15.0)\n
Run Code Online (Sandbox Code Playgroud)\n

这表明它正在查看该parsec包,只是找不到模块名称Text.Parsec.String.Combinator。如果它根本没有看到该包,它就无法为您提供该包的任何建议,如果它“意识到”该包,同时又被告知不要依赖它,它会说类似“来自隐藏包parsec-3.1.15.0”。

\n

事实上,该版本的 hackage 列表parsec没有显示任何名为 的模块Text.Parsec.String.Combinator。有Text.Parsec.String,但该前缀下没有模块。就这样Text.Parsec.Combinator(如错误消息所示)。

\n

Main.hs你说你身上有什么东西在起作用?

\n