Haskell Cabal库无法导入暴露的模块

Haskell Cabal库无法导入暴露的模块,haskell,cabal,Haskell,Cabal,我的foo.cabal文件如下所示: library exposed-modules: Foo.Bar, Foo.Something hs-source-dirs: lib default-language: Haskell2010 executable foobar main-is: Main.hs other-modules: Utils, -- Local module in ./src

我的foo.cabal文件如下所示:

library
  exposed-modules:
      Foo.Bar,
      Foo.Something
  hs-source-dirs:      lib
  default-language:    Haskell2010

executable foobar
  main-is:             Main.hs
  other-modules:
      Utils,  -- Local module in ./src
      Foo.Bar

  hs-source-dirs:      src
  default-language:    Haskell2010
根据此处的示例代码:

我得到以下错误:

$ cabal build
Resolving dependencies...
Configuring foobar-0.1.0.0...
Preprocessing executable 'foobar' for foobar-0.1.0.0..
cabal: can't find source for Foo/Bar in src, dist/build/foobar/autogen,
dist/build/global-autogen

您必须将库添加到可执行文件的依赖项中。这是你的阴谋集团文件的hpack版本,我永远记不起阴谋集团的语法:

name: foo
version: 0.1.0
dependencies:
  - base

source-dirs: lib

# no need for exponsed-modules, hpack does that for you

executable:
  main: Main.hs
  source-dirs: src
  dependencies:
    - base
    - foo

或者只需使用
stacknew
,您就可以得到一个工作项目。

将行
builddependens:foo
添加到您的可执行文件节中,以指示可执行文件取决于您定义的库。

没有办法绕过stack-huh?对于阴谋集团来说,这似乎是一件简单的事情,我想知道在我切换之前是否能从中获得更多的里程对不起,我实际上切换到了hpack,但我仍然无法获得想要的行为。我需要公开一些库,并将公开模块作为依赖项添加到可执行文件中。此解决方案不声明库部件。