Haskell - 从源添加包到 Yesod 项目

Haskell - adding a package from source to a Yesod project

我找到了一个很好的音频库来处理服务器端的音频,但我在实际将其作为 yesod 的一部分时遇到了麻烦(可能是因为我还不太了解 cabal/stack)。

我正在尝试包含此模块 Sound.File.Sndfile 并且我已从此处 http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.27.tar.gz 下载其源文件。完成它的步骤是什么?

编辑

我试着完成这一步

runhaskell Setup.hs configure --ghc
runhaskell Setup.hs build
runhaskell Setup.hs install

但它没有 Setup.hs 文件。

编辑 2

我已经按照 Alexis King 的建议添加了依赖项 hsndfile,但是在构建时出现以下错误:

[ 1 of 59] Compiling Enums            ( Enums.hs, .stack-work/dist/x86_64-linux/Cabal-1.22.7.0/build/Enums.o )
<command line>: can't load .so/.DLL for: libsndfile.so (libsndfile.so: cannot open shared object file: No such file or directory)

--  While building package Fastwork-0.0.0 using:
      /home/geppetto/.stack/setup-exe-cache/x86_64-linux/setup-Simple-Cabal-1.22.7.0-ghc-7.10.3 --builddir=.stack-work/dist/x86_64-linux/Cabal-1.22.7.0 build lib:Fastwork exe:Fastwork --ghc-options " -ddump-hi -ddump-to-file"
    Process exited with code: ExitFailure 1

我下载了libsndfile-1.0.25.tar.gz并解压了,然后运行,./configure,make,make install。当我尝试在我的 Yesod 项目中再次执行 stack build 时,错误是相同的。我错过了什么?

有什么理由不能使用any of these libraries that are already on Hackage?如果您使用实际包目录中的包而不是仅使用 tarball,它可能会更容易、更安全、更可预测。

如果您真的想要使用您找到的那个库,并且您正在使用堆栈,您可以将它添加到 [=13] 的 packages 部分=] 文件:

packages:
- '.'
- location: http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.27.tar.gz
  extra-dep: true

然后您可以将 libsndfile 的依赖项添加到您的 .cabal 文件中。但是,我会小心依赖来自任意 URL 的包,所以我可能至少会下载该包并解压它。然后你可以只指向本地路径而不是远程 URL:

packages:
- '.'
- location: ./some/path/to/libsndfile
  extra-dep: true

有关详细信息,请参阅 documentation for the stack.yaml file