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

このコードをコンパイルするにはどうすればよいですか?GHC7.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 に答える