GHC包冲突

时间:2012-05-06 21:21:16

标签: haskell compiler-errors package ghc

我试图用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。

2 个答案:

答案 0 :(得分:13)

导入Data.Maybehaskell98包不再与base兼容,因此使用haskell98模块会带来不必要的痛苦。

答案 1 :(得分:12)

您的想法是,您只使用haskell98basehaskell2010中的一个。 haskell*包是相应语言标准规定的库集,因此如果您使用其中一个,则更有可能与非GHC编译器兼容。但是,Hackage上的绝大多数软件包都使用base,所以你可能最好坚持使用它。

Haskell98严格来说早于分层模块,所以这就是为什么它们都被称为MaybeList以及IO等等。 (实际上,我认为这些名字比现在更好,但这是另一个故事)。您的问题是您尝试同时使用旧的Maybe和新的System.IO,旧的和新的包都不提供这两者。