2

次のように scion-browser パッケージをインストールしようとすると、次のエラーが発生します。

% 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

これを修正する方法はありますか?

ありがとう。

4

1 に答える 1

4

問題は、haskeline-0.7.0.0が使用されるStateT型を変更したことです。ではmtlのモジュールをhaskeline < 0.7使用していましたが、バージョン 0.7.0.0 では依存関係を削除し、 transformersパッケージのモナド トランスフォーマーを直接使用しています。now は単なるラッパーであるため、それ自体は問題になりません。ただし、によって使用されるモジュールは isであり、from はwrapsです。したがって、Control.Monad.StatehaskelinemtlStateTmtltransformershaskelineControl.Monad.Trans.State.StrictControl.Monad.StatemtlControl.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'

fromはscion-browserで使用されSystem.Console.Haskeline.MonadExceptionなくなりました。StateT

haskeline簡単な修正は、以前のバージョンに制限することです。

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

scion-browserもう 1 つの修正は、ソース内のインポートを に変更して、Control.Monad.State.Strictでビルドできるようにすることhaskeline-0.7.0.0です。

于 2012-07-23T19:08:38.210 に答える