2012-07-23 64 views
2

我在尝试按以下步骤安装接穗浏览器软件包时出现以下错误:错误安装接穗浏览器

% 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'? – 2012-07-23 18:05:29

+0

我假设你只是在寻找版本号。 mtl-2.0.1.0和变换器-0.2.2.0和haskeline-0.7.0.0。 – brooks94 2012-07-23 18:32:20

+0

不,我怀疑有其他事情,但我同时找到了原因。 – 2012-07-23 19:09:51

回答

4

问题是haskeline-0.7.0.0更改了使用的StateT类型。在haskeline < 0.7中,它使用mtl中的Control.Monad.State模块,在版本0.7.0.0中,haskeline丢弃了对mtl的依赖关系,并直接使用transformers包中的StateT monad变换器。这本身不是问题,因为mtl现在只是transformers的包装。然而,haskeline使用的模块是Control.Monad.Trans.State.Strict,而Control.Monad.Statemtl包装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不再是由scion-browser使用的StateT

最简单的解决方法是限制haskeline到一个较早的版本,

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

其他的解决将是改变在scion-browser源的进口Control.Monad.State.Strict,使之建立与haskeline-0.7.0.0

+0

钉着,它。谢谢。 – brooks94 2012-07-23 20:03:47

+0

版本0.2.10中添加到scion-browser.cabal的上界<0.7,即将发布 – 2012-07-24 18:43:44

+0

@JPMoresmau好。从长远来看,切换到“Control.Monad.Strict”以跟上较新的haskeline版本会更好吗? – 2012-07-24 18:48:48