7

我正在尝试使用 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。

4

2 回答 2

13

导入Data.Maybe. 该haskell98软件包不再与 兼容base,因此使用这些haskell98模块只会带来不必要的痛苦。

于 2012-05-06T21:26:03.987 回答
12

这个想法是您使用haskell98,base或中的一个haskell2010。这些haskell*包是相应语言标准规定的一组库,因此如果您使用其中一个,则更有可能与非 GHC 编译器兼容。但是,无论如何,Hackage 上的绝大多数软件包都在使用base,所以你最好还是坚持下去。

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

于 2012-05-07T10:45:03.510 回答