如何使用stack和cabal为Haskell安装软件包?

zf2sa74q  于 2024-01-08  发布在  其他
关注(0)|答案(2)|浏览(188)

我正在尝试安装一个小的Haskell包。
我使用stack创建了一个项目:

  1. stack new my-project simple

字符串
这很好。我能够构建和运行代码。
但后来我偶然发现需要使用其他库。在互联网上搜索,我发现我应该使用cabal来做到这一点。首先安装它:

  1. brew install cabal-install


然后更新它:

  1. cabal update


然后试着用它安装一个库:

  1. cabal install --lib split


这导致:

  1. Warning: Unknown/unsupported 'ghc' version detected (Cabal 3.10.1.0 supports
  2. 'ghc' version < 9.8): /usr/local/bin/ghc is version 9.8.1
  3. Warning: Unknown/unsupported 'ghc' version detected (Cabal 3.10.1.0 supports
  4. 'ghc' version < 9.8): /usr/local/bin/ghc is version 9.8.1
  5. Resolving dependencies...
  6. Build profile: -w ghc-9.8.1 -O1
  7. In order, the following will be built (use -v for more details):
  8. - split-0.2.4 (lib) (requires download & build)
  9. Downloading split-0.2.4
  10. Downloaded split-0.2.4
  11. Starting split-0.2.4 (lib)
  12. Building split-0.2.4 (lib)
  13. Failed to build split-0.2.4.
  14. Build log ( /Users/nene/.cache/cabal/logs/ghc-9.8.1/splt-0.2.4-d1ef7190.log ):
  15. Configuring library for split-0.2.4..
  16. Preprocessing library for split-0.2.4..
  17. Building library for split-0.2.4..
  18. [1 of 2] Compiling Data.List.Split.Internals ( src/Data/List/Split/Internals.hs, dist/build/Data/List/Split/Internals.o, dist/build/Data/List/Split/Internals.dyn_o )
  19. [2 of 2] Compiling Data.List.Split ( src/Data/List/Split.hs, dist/build/Data/List/Split.o, dist/build/Data/List/Split.dyn_o )
  20. ld: warning: directory not found for option '-L/Library/Developer/CommandLineTools/SDKs/MacOSX13.sdk/usr/lib'
  21. ld: unknown option: -no_fixup_chains
  22. clang: error: linker command failed with exit code 1 (use -v to see invocation)
  23. `clang' failed in phase `Linker'. (Exit code: 1)
  24. Error: cabal: Failed to build split-0.2.4. See the build log above for
  25. details.


似乎与阴谋集团版本(3.10.1.0)和GHC版本(9.8.1)有冲突。不知道如何解决它。
此外,我有一个stack创建的my-project.cabal文件。在里面我看到:

  1. cabal-version: 2.2


如果我的心智模型是正确的,那么stack使用它自己独立的GHC安装,(可能)也使用它自己的Cabal安装。
我尝试创建package.yaml文件(根据Silvio Mayolo的建议),内容如下:

  1. dependencies:
  2. - split


但这似乎没有什么效果,编译只是抱怨找不到Data.List.Split模块(split库应该提供这个模块)。

**PS:**目前我只是简单地实现了我想自己导入的小函数。但如果能弄清楚如何安装一些Haskell库就更好了。

xqnpmsa8

xqnpmsa81#

要将依赖项添加到使用简单模板创建的项目中,您需要将其添加到模板创建的.cabal文件中的build-depends字段-在您的示例中为my-project.cabal
之后,您的cabal文件应该如下所示:

  1. cabal-version: 2.2
  2. name: my-project
  3. version: 0.1.0.0
  4. -- synopsis:
  5. -- description:
  6. homepage: https://github.com/githubuser/my-project#readme
  7. license: BSD-3-Clause
  8. license-file: LICENSE
  9. author: Author name here
  10. maintainer: [email protected]
  11. copyright: 2023 Author name here
  12. category: Web
  13. build-type: Simple
  14. extra-source-files: README.md
  15. CHANGELOG.md
  16. executable my-project
  17. hs-source-dirs: src
  18. main-is: Main.hs
  19. default-language: Haskell2010
  20. build-depends: base >= 4.7 && < 5, split
  21. ghc-options: -Wall
  22. -Wcompat
  23. -Widentities
  24. -Wincomplete-record-updates
  25. -Wincomplete-uni-patterns
  26. -Wmissing-export-lists
  27. -Wmissing-home-modules
  28. -Wpartial-fields
  29. -Wredundant-constraints

字符串

展开查看全部
rsaldnfx

rsaldnfx2#

如果你只是想快速尝试一些东西,那么cabal run my-script.hs,其中my-script.hs

  1. {- cabal:
  2. build-depends: base, split
  3. -}
  4. import Data.List.Split
  5. main = print $ splitOn "x" "axbxc"

字符串
是最简单的(和单个文件)解决方案。
更多注意事项:

  • 如果可以的话只使用cabal,它是haskell的核心构建和打包工具
  • stack和stackage是(1)一个项目管理工具(你有不止一个cabal库),和(2)一个策划的软件包列表。“策划”是指“所有这些软件包一起构建而没有错误”,它是整个hackage的子集,cabal去那里找到所有的软件包。
  • package.yaml是基于yaml的.cabal文件生成器hpack的源代码。(如果在package.yaml所在的同一个文件夹中运行hpack,它将从中创建my-package.cabal。)Stack还依赖于hpack,如果在项目中找到package.yaml文件,则默认情况下会运行它
  • cabal多年来在项目管理和.cabal文件语法方面都变得更好了(还有cabal.project文件,它可以支持多包项目),所以人们可以只使用它
展开查看全部

相关问题