2012-07-23 1 views
2

я получаю следующее сообщение об ошибке при попытке установить пакет отпрыск-браузера следующим образом:Ошибка при установке Scion-браузер

% cabal install scion-browser-0.2.9 
<snipped> 
[23 of 23] Compiling Main    (src/Main.hs, dist/build/scion-browser/scion-browser-tmp/Main.o) 

src/Main.hs:31:24: 
    No instance for (MonadException BrowserM) 
     arising from a use of `getInputLine' 
    Possible fix: 
     add an instance declaration for (MonadException BrowserM) 
    In a stmt of a 'do' block: maybeLine <- getInputLine "" 
    In the expression: 
     do { maybeLine <- getInputLine ""; 
      case maybeLine of { 
      Nothing -> return() 
      Just line -> do { ... } } } 
    In an equation for `loop': 
     loop 
      = do { maybeLine <- getInputLine ""; 
       case maybeLine of { 
        Nothing -> return() 
        Just line -> ... } } 
cabal: Error: some packages failed to install: 
scion-browser-0.2.9 failed during the building phase. The exception was: 
ExitFailure 1 

Любая идея, как это исправить?

Спасибо.

+0

Что отображают трансформирующие трансформаторы 'ghc-pkg list mtl' и' ghc-pkg list transformers'? И у вас установлена ​​более старая 'haskeline'? –

+0

Я предполагаю, что вы просто ищете номера версий. mtl-2.0.1.0 и трансформаторы-0.2.2.0 и haskeline-0.7.0.0. – brooks94

+0

Нет, я подозревал что-то еще, но я тем временем нашел причину. –

ответ

4

Проблема в том, что haskeline-0.7.0.0 изменен использованный тип StateT. В haskeline < 0.7 он использовал модуль Control.Monad.State от mtl, в версии 0.7.0.0, haskeline опустил зависимость от mtl и использует трансформатор monad StateT пакета transformers. Это само по себе не было проблемой, так как mtl теперь всего лишь обертка вокруг transformers. Однако модуль, используемый haskeline, составляет Control.Monad.Trans.State.Strict, а Control.Monad.State от mtl обертывания Control.Monad.Trans.State.Lazy. Таким образом, не

instance MonadException m => MonadException (StateT s m) where 
    controlIO f = StateT $ \s -> controlIO $ \(RunIO run) -> let 
        run' = RunIO (fmap (StateT . const) . run . flip runStateT s) 
        in fmap (flip runStateT s) $ f run' 

от System.Console.Haskeline.MonadException больше не для StateT, используемого scion-browser.

Простое исправление для ограничения haskeline к более ранней версии,

cabal install --constraint="haskeline < 0.7" scion-browser 

Другое исправление будет изменением импорта в scion-browser источнике Control.Monad.State.Strict, чтобы сделать его строить с haskeline-0.7.0.0.

+0

Гвоздь, это. Благодарю. – brooks94

+0

Верхняя граница <0.7 добавлена ​​в scion-browser.cabal в версии 0.2.10, которая будет выпущена в ближайшее время –

+0

@JPMoresmau Хорошо. Будет ли в конечном итоге лучше переключиться на «Control.Monad.Strict», чтобы идти в ногу с новыми релизами haskeline? –

 Смежные вопросы

  • Нет связанных вопросов^_^