GHC包冲突

Ada*_*ume 7 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!"
Run Code Online (Sandbox Code Playgroud)

如果我跑ghc Test.hs,我得到:

Could not find module `Maybe'
It is a member of the hidden package `haskell98-2.0.0.1'.
Run Code Online (Sandbox Code Playgroud)

所以我尝试ghc -package haskell98 Test.hs:

Ambiguous module name `Prelude':
  it was found in multiple packages: base haskell98-2.0.0.1
Run Code Online (Sandbox Code Playgroud)

这似乎不对,但我尝试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'.
Run Code Online (Sandbox Code Playgroud)

那么我试试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
Run Code Online (Sandbox Code Playgroud)

我该如何编译这段代码?我正在使用GHC 7.4.1.

Dan*_*her 13

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

  • `Mabye`只是`Data.Maybe`的haskell98包装器.它们几乎在所有方面都是等价的,除了使用"Maybe"要求你现在跳过一些箍,因为你不能将它与base一起使用. (2认同)

Ben*_*ood 12

这个想法是,你使用完全相同的一个haskell98,basehaskell2010.这些haskell*包是相应语言标准规定的库集,因此如果您使用其中一个,则更有可能与非GHC编译器兼容.然而,base无论如何,Hackage上的绝大多数软件包都在使用,所以你最好坚持使用它.

Haskell98严格地说早层次模块,所以这就是为什么他们都被称为MaybeListIO等等.(实际上,我认为这些名字比现在更好,但这是另一个故事).你的问题是你试图同时使用旧的Maybe和新System.IO的,旧的和新的包都不提供.