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

时间:2015-06-01 02:36:33

标签: cabal

在我第一次尝试使用阴谋时,我遇到了让我困惑的事情。

我有一个以

开头的Haskell文件
class A(object):
    def test(self):
        print(1)


class B(object):
    def method(self):
        a = A()
        a.test()


class CustomA(A):
    def test(self):
        print(2)


class C(B):
    def method(self):
        A = CustomA()
        A.test()

c = C()
c.method()

这可以通过命令行ghc编译。

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

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

我收到无法找到的错误build-depends: base

所以我将build-depends行更改为

Data.Array

我收到错误,在多个包中找到了build-depends: base, haskell2010

所以我试试

Prelude

我收到错误build-depends: haskell2010 无法找到。

最终我发现我可以使用

Data.Ord

或者我可以只使用

build-depends:   base, array

并省略build-depends: haskell2010 的导入。

但这一切让我想知道为什么有一个Data.Ord包以及一个base包?对我来说有意义的是从语言标准中定义的模块(我认为是haskell2010代表的)开始,然后根据需要添加非标准库。 haskell2010base的子集吗?我也注意到hoogle倾向于引导我走向haskell2010并远离base

简而言之,haskell2010base套餐之间的关系是什么?那么如何决定使用哪个来获得前奏?

1 个答案:

答案 0 :(得分:1)

通常一个人使用base包。 Haskell2010的唯一用法是,如果您想将自己固定在参考实现的特定标准上(这很少见)。后一种方案最近变得不那么明显,因为它是基础上的比较层,并且基础上的某些变化不能完全被涂抹。

所以推荐的方式当然是:

build-depends:   base, array