Конфликты пакетов GHC

Я пытаюсь скомпилировать следующий код с помощью GHC:

<code>module Test where

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

null = ()

main :: IO ()
main = putStrLn "Hello, world!"
</code>

Если я просто бегуghc Test.hs, Я получил:

<code>Could not find module `Maybe'
It is a member of the hidden package `haskell98-2.0.0.1'.
</code>

Так я стараюсьghc -package haskell98 Test.hs:

<code>Ambiguous module name `Prelude':
  it was found in multiple packages: base haskell98-2.0.0.1
</code>

Это не кажется правильным, но я пытаюсьghc -package haskell98 -hide-package base Test.hs:

<code>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'.
</code>

Итак, я пытаюсьghc -package haskell98 -hide-package base -package haskell2010 Test.hs:

<code>Ambiguous module name `Prelude':
  it was found in multiple packages:
  haskell2010-1.1.0.1 haskell98-2.0.0.1
</code>

Как мне скомпилировать этот код? Я использую GHC 7.4.1.

Ответы на вопрос(2)

haskell98, base, илиhaskell2010.haskell*акеты @ - это набор библиотек, которым соответствует соответствующий языковой стандарт, поэтому, если вы используете одну из них, у вас больше шансов быть совместимыми с компиляторами не-GHC. Тем не менее, подавляющее большинство пакетов на Hackage используютbase в любом случае, так что, наверное, тебе лучше придерживаться этого.

Haskell98, строго говоря, предшествует иерархическим модулям, поэтому все они называютсяMaybe а такжеList а такжеIO и так далее. (На самом деле, я думаю, что это лучшие имена, чем они сейчас, но это другая история). Ваша проблема в том, что вы пытались использовать старыйMaybe и новыйSystem.IO в то же время, и ни старый, ни новый пакет не предоставляют оба варианта.

 Adam Crume07 мая 2012 г., 18:49
Очень информативно. Спасибо
Решение Вопроса

Data.Maybe.haskell98 package больше не совместим сbase, поэтому с помощьюhaskell98 модули приносит просто ненужную боль.

 Daniel Fischer06 мая 2012 г., 23:35
Mabye это просто оболочка haskell98 вокругData.Maybe. Они эквивалентны почти во всех отношениях, кроме использованияMaybe требует от вас прыгать через несколько обручей, поскольку вы не можете использовать его вместе с базой.
 Adam Crume06 мая 2012 г., 23:31
Я думал, что Maybe и Data.Maybe - это разные модули. Они эквивалентны?
 hammar06 мая 2012 г., 23:35
@ AdamCrume: Data.Maybe в значительной степени надмножество старогоМожет быт модуль. Если вы сравните документы, вы увидите, что основным отличием является то, что Data.Maybe экспортирует больше экземпляров.

Ваш ответ на вопрос