首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GHC包冲突

GHC包冲突
EN

Stack Overflow用户
提问于 2012-05-07 05:21:16
回答 2查看 3.7K关注 0票数 7

我正在尝试用GHC编译以下代码:

代码语言:javascript
复制
module Test where

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

null = ()

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

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

代码语言:javascript
复制
Could not find module `Maybe'
It is a member of the hidden package `haskell98-2.0.0.1'.

所以我试着使用ghc -package haskell98 Test.hs

代码语言:javascript
复制
Ambiguous module name `Prelude':
  it was found in multiple packages: base haskell98-2.0.0.1

看起来不太对劲,但我尝试了一下ghc -package haskell98 -hide-package base Test.hs

代码语言:javascript
复制
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

代码语言:javascript
复制
Ambiguous module name `Prelude':
  it was found in multiple packages:
  haskell2010-1.1.0.1 haskell98-2.0.0.1

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-07 05:26:04

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

票数 13
EN

Stack Overflow用户

发布于 2012-05-07 18:45:04

其思想是您只能使用haskell98basehaskell2010中的一个。haskell*包是由相应的语言标准规定的一组库,所以如果您使用其中的一个包,您就有更好的机会与非GHC编译器兼容。然而,Hackage上的绝大多数包都使用base,所以你最好还是坚持使用它。

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

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10474413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档