在我第一次尝试使用阴谋时,我遇到了让我困惑的事情。
我有一个以
开头的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
代表的)开始,然后根据需要添加非标准库。 haskell2010
是base
的子集吗?我也注意到hoogle倾向于引导我走向haskell2010
并远离base
。
简而言之,haskell2010
和base
套餐之间的关系是什么?那么如何决定使用哪个来获得前奏?
答案 0 :(得分:1)
通常一个人使用base
包。 Haskell2010
的唯一用法是,如果您想将自己固定在参考实现的特定标准上(这很少见)。后一种方案最近变得不那么明显,因为它是基础上的比较层,并且基础上的某些变化不能完全被涂抹。
所以推荐的方式当然是:
build-depends: base, array