应该使用基础包还是 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
代表),然后根据需要添加非标准库。 base
是 haskell2010
的子集吗?我还注意到 hoogle 倾向于将我引向 base
而远离 haskell2010
。
简而言之base
和haskell2010
包之间的关系是什么?以及应该如何决定使用哪一个来获得 Prelude?
一般使用base
包。 Haskell2010
的唯一用法是如果您想将自己固定在参考实现的特定标准上(这种情况很少见)。后一个包最近特别没有意义,因为它是 base 之上的兼容层,并且 base 中的某些更改无法完全掩盖。
所以推荐的方式肯定是:
build-depends: base, array
在我第一次尝试使用 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
代表),然后根据需要添加非标准库。 base
是 haskell2010
的子集吗?我还注意到 hoogle 倾向于将我引向 base
而远离 haskell2010
。
简而言之base
和haskell2010
包之间的关系是什么?以及应该如何决定使用哪一个来获得 Prelude?
一般使用base
包。 Haskell2010
的唯一用法是如果您想将自己固定在参考实现的特定标准上(这种情况很少见)。后一个包最近特别没有意义,因为它是 base 之上的兼容层,并且 base 中的某些更改无法完全掩盖。
所以推荐的方式肯定是:
build-depends: base, array