应该使用基础包还是 haskell2010 包?

Should one use the base package or the haskell2010 package?

在我第一次尝试使用 cabal 时,我 运行 遇到了一些让我感到困惑的事情。

我有一个 Haskell 文件以

开头
import Data.List(nub,(\), minimumBy)
import Data.Array
import Data.Ord(Ordering(..))

使用命令行 ghc 可以很好地编译。

但我想我会使用 cabal,因为我正在使用 IntelliJ 进行编辑并且它使用 cabal 作为构建工具。由 IntelliJ(或 cabal,或某种组合)生成的 cabal 文件包含行

build-depends:   base

然后我收到找不到的错误 Data.Array

所以我将 build-depends 行更改为

build-depends:   base, haskell2010

而且我收到一个错误,在多个包中发现 Prelude

所以我试试

build-depends:   haskell2010

然后我收到一个错误,提示无法找到 Data.Ord

最后我发现我可以使用

build-depends:   base, array

或者我可以只使用

build-depends: haskell2010

并省略 Data.Ord.

的导入

但这一切让我想知道为什么会有base包和haskell2010包?对我来说有意义的是从语言标准中定义的模块开始(我认为 haskell2010 代表),然后根据需要添加非标准库。 basehaskell2010 的子集吗?我还注意到 hoogle 倾向于将我引向 base 而远离 haskell2010

简而言之basehaskell2010包之间的关系是什么?以及应该如何决定使用哪一个来获得 Prelude?

一般使用base包。 Haskell2010 的唯一用法是如果您想将自己固定在参考实现的特定标准上(这种情况很少见)。后一个包最近特别没有意义,因为它是 base 之上的兼容层,并且 base 中的某些更改无法完全掩盖。

所以推荐的方式肯定是:

build-depends:   base, array