如何在Haskell中向项目添加库?

9nvpjoqh  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(107)

我正在尝试编写一个parter模块,为此我想连接parsec库。我将依赖项放在package.yaml中,但parsec只在Main.hs中可见。
我的包裹yaml

dependencies:
- base >= 4.7 && < 5
- parsec
ghc-options:
- -Wall
- -Wcompat
- -Widentities
- -Wincomplete-record-updates
- -Wincomplete-uni-patterns
- -Wmissing-export-lists
- -Wmissing-home-modules
- -Wpartial-fields
- -Wredundant-constraints

library:
  source-dirs: src
  dependencies :
    - parsec

executables:
  haskell-lab4-exe:
    main:                Main.hs
    source-dirs:         app
    ghc-options:
    - -threaded
    - -rtsopts
    - -with-rtsopts=-N
    dependencies:
    - haskell-lab4
    - parsec

tests:
  haskell-lab4-test:
    main:                Spec.hs
    source-dirs:         test
    ghc-options:
    - -threaded
    - -rtsopts
    - -with-rtsopts=-N
    dependencies:
    - haskell-lab4

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

|-app
|  \- Main.hs
|
|-src
|  \-Parser
|   |    \-Myfile.hs <-- I need parsec in this file
|   | 
|   |-Lib.hs
|
|-test

错误:

Could not find module ‘Text.Parsec.String.Combinator’
    Perhaps you meant Text.Parsec.Combinator (from parsec-3.1.15.0)
    Use -v (or `:set -v` in ghci) to see a list of the files searched for.
kninwzqo

kninwzqo1#

你确定你不是用错了模块名吗?
阅读错误消息的以下部分:

Could not find module ‘Text.Parsec.String.Combinator’
    Perhaps you meant Text.Parsec.Combinator (from parsec-3.1.15.0)

这表明它 * 正在 * 看到parsec包,只是找不到模块名Text.Parsec.String.Combinator .如果它根本没有看到这个包,它就不能从这个包中提供任何建议,如果它“知道”这个包,同时也被告知不要依赖它,它会说类似于“来自隐藏包parsec-3.1.15.0“的话.
实际上the hackage listing for that version of parsec没有显示任何名为Text.Parsec.String.Combinator的模块,有Text.Parsec.String,但是没有模块在这个前缀下,还有Text.Parsec.Combinator(如错误消息所示)。
您说Main.hs中的哪些部分工作正常?

相关问题