2010-01-12 14 views
21

Oceniając wiersz „import Control.Monad.State” w module Haskell, GHC daje mi następujący błąd:Control.Monad.State Haskell

Could not find module `Control.Monad.State': 
    it was found in multiple packages: monads-fd-0.0.0.1 mtl-1.1.0.2 
Failed, modules loaded: none. 

Jak mogę rozwiązać ten konflikt ?

Odpowiedz

35

Masz kilka opcji. Albo:

  • ghc-pkg hide monads-fd. Spowoduje to, że GHC i GHCi domyślnie ignorują obecność monads-fd, aż do późniejszej ghc-pkg expose monads-fd, ale oprogramowanie zainstalowane przez Cabal nadal będzie w stanie zbudować przeciwko niemu.
  • Użyj pragma {-# LANGUAGE PackageImports #-} i zmień instrukcję importu na import "mtl" Control.Monad.State.
  • Użyj Cabal, aby zbudować projekt, i podaj mtl w linii .

Pierwsza z nich jest najlepsza dla zwykłego hakowania, a ostatnia jest najlepsza dla wersji produkcyjnych.

Te wszystkie zakładają chcesz moduł mtl a nie modułu monads-fd; w przeciwnym razie zamień je.

+0

Dziękuję za tę odpowiedź, mam ten sam problem z poza kabałą, nie wiedziałem, co robić. –

1

Oba pakiety wdrażają Control.Monad.State, a GHC nie wie, która to implementacja powinna preferować, więc musisz ukryć jeden z pakietów z GHC. Wygląda na to, że flaga GHC -ignore-package <name> może ci w tym pomóc.