GHC包冲突(GHC package conflicts)

2019-06-24 04:44发布

我试图用GHC编译如下代码:

module Test where

import Maybe
import Prelude hiding (null)
import System.IO

null = ()

main :: IO ()
main = putStrLn "Hello, world!"

如果我只是运行ghc Test.hs ,我得到:

Could not find module `Maybe'
It is a member of the hidden package `haskell98-2.0.0.1'.

所以我尽量ghc -package haskell98 Test.hs

Ambiguous module name `Prelude':
  it was found in multiple packages: base haskell98-2.0.0.1

它看起来不正确,但我尽量ghc -package haskell98 -hide-package base Test.hs

Could not find module `System.IO'
It is a member of the hidden package `base'.
It is a member of the hidden package `haskell2010-1.1.0.1'.

于是我尝试ghc -package haskell98 -hide-package base -package haskell2010 Test.hs

Ambiguous module name `Prelude':
  it was found in multiple packages:
  haskell2010-1.1.0.1 haskell98-2.0.0.1

如何编译这段代码? 我使用GHC 7.4.1。

Answer 1:

进口Data.Maybe 。 所述haskell98包不再兼容base ,因此使用haskell98模块带来只是不必要的痛苦。



Answer 2:

这个想法是,你使用完全相同的一个haskell98base ,或haskell2010 。 该haskell*包是一套由相应的语言标准规定的库,所以如果你使用其中的一个你的是与非GHC编译器兼容的一个更好的机会。 然而,在Hackage绝大多数包使用base ,所以你可能会更好过坚持这一点。

Haskell98严格地说早层次模块,所以这就是为什么他们都称为MaybeListIO等等。 (其实我觉得这些都是比他们现在有什么更好的名字,但那是另一回事)。 你的问题是,你试图使用旧Maybe和新System.IO的同时,既不老也不是新的软件包同时提供。



文章来源: GHC package conflicts