haskell-ja > Archives > 2012/06/13

2012/06/13 08:29:35 UTCcutsea110
#
パッケージをGHC-7.4.2+HP2012.2.0.0な環境に追従させようとしてて、cabal buildは通るんだけど、emacs+haskell-mode+ghc-modではエラーになる。
#
Network/Pcap/Enumerator.hs:16:8:
    Could not deduce (transformers-0.2.2.0:Control.Monad.IO.Class.MonadIO
                        m)
      arising from a use of `tryIO'
    from the context (MonadIO m)
      bound by the type signature for
                 enumOffline :: MonadIO m =>
                                FilePath -> Enumerator (PktHdr, ByteString) m b
      at Network/Pcap/Enumerator.hs:(15,1)-(18,29)
    Possible fix:
      add (transformers-0.2.2.0:Control.Monad.IO.Class.MonadIO
             m) to the context of
        the type signature for
          enumOffline :: MonadIO m =>
                         FilePath -> Enumerator (PktHdr, ByteString) m b
    In the expression: tryIO
    In a stmt of a 'do' block: h <- tryIO $ openOffline path
    In the expression:
      do { h <- tryIO $ openOffline path;
           let iter = enumPcap1 h step;
           Iteratee $ runIteratee iter }

Network/Pcap/Enumerator.hs:22:8:
    Could not deduce (transformers-0.2.2.0:Control.Monad.IO.Class.MonadIO
                        m)
      arising from a use of `tryIO'
    from the context (MonadIO m)
      bound by the type signature for
                 enumLive :: MonadIO m =>
                             String
                             -> Int -> Bool -> Int64 -> Enumerator (PktHdr, ByteString) m b
      at Network/Pcap/Enumerator.hs:(21,1)-(24,29)
    Possible fix:
      add (transformers-0.2.2.0:Control.Monad.IO.Class.MonadIO
             m) to the context of
        the type signature for
          enumLive :: MonadIO m =>
                      String
                      -> Int -> Bool -> Int64 -> Enumerator (PktHdr, ByteString) m b
    In the expression: tryIO
    In a stmt of a 'do' block:
      h <- tryIO $ openLive name snaplen promisc timeout
    In the expression:
      do { h <- tryIO $ openLive name snaplen promisc timeout;
           let iter = enumPcap1 h step;
           Iteratee $ runIteratee iter }

Network/Pcap/Enumerator.hs:28:19:
    Could not deduce (transformers-0.2.2.0:Control.Monad.IO.C
#
型宣言消せばpassる。
#
型は MonadIO => FilePath -> Enumerator (pktHdr, ByteString) m bとなってて
#
型宣言を消してロードしてから:tで確認すると
#
あ、違った。型宣言は MonadIO m => PcapHandle -> Enumerator (PktHdr,ByteString) m bで
#
型宣言消してロードしてから:tで確認すると、
#
transformers-0.2.2.0:Control.Monad.IO.Class.MonadIO m => PcapHandle -> Enumerator (PktHdr, ByteString) m bってでる。
#
:i MonadIOするとDefined in `Control.Monad.IO.Class'のMonadIOを指すんで、importしてるのも間違ってないはずなんだけど、why?
#
気になるのはghc-pkg listするとtransformersは0.2.2と0.3が入ってるんだが、なぜC-cC-lした時には0.2.2の方が選ばれるんだろう?
2012/06/13 08:45:45 UTCcutsea110
#
型あってるように見えるんだけどな。。。不思議なことを言う。
#
なんかControl.Monad.IO.Class.MonadIOってフルネームで言ってくるのが変な気もするが。
#
tryIOで文句言ってるのかと思って:t tryIOしてもやはりtransformers-0.2.2.0:Control.Monad.IO.Class.MonadIO m => IO b -> Iteratee a m bだから同じMonadIOだし。
#
つかcabal buildが通っている段階で型宣言は正しいんだよね?(てか型宣言自体は以前のバージョンと変わってない)
2012/06/13 09:02:19 UTCkazu
#
ghc-mod は、複数の GHC がある場合に、うまく動かないかもしれません。
2012/06/13 09:03:07 UTCcutsea110
#
じゃあ、ghc-7.4.1+HP2012.2.0.0を入れた後でghc-7.4.2を入れたのが不味い?
#
ps aしてみたらC-cC-lした時のghciは7.4.2の方が起動されているっぽい。
#
もしかしてtransformersが2バージョン入っているのがダメ?
#
ghc-pkg checkは今のところquietでござる。
2012/06/13 09:08:38 UTCkazu
#
Emacs の exec-path をうまく調整すれば、うまく行く可能性もあります。
2012/06/13 09:10:55 UTCcutsea110
#
exec-pathチェックしたけどこれでいいんじゃないかなー。
#
複数のGHCってのはもしかしてOSのパッケージシステムと自力インストールと共存しているとかそういう意味ですか?
#
であれば全部自力インストールでござる。
#
GHCとHPに関しては--prefix=/usr/pkgしてmake installしてる。
2012/06/13 09:12:47 UTCkazu
#
GHC 7.4.2 でうまく動かしたいということですか? そうなら、もしかすると ghc-mod を GHC 7.4.2 でコンパイルする必要があるかもしれません。
#
GHC API の挙動は謎が多いのです。
2012/06/13 09:14:07 UTCcutsea110
#
えっと、GHC-7.4.2を入れてからcabal install ghc-modしたので、そういう意味ではいいんですよね?
#
HPを入れる時には7.4.1なのでそのあたりは7.4.1でコンパイルされちゃってるか。
#
HPで入ったライブラリ以外は7.4.2でコンパイルされててその辺がおかしいのかな。
#
もっかい作り直すか。今のところ7.4.2が欲しいわけじゃないし。。。
#
つかHPが7.4.2入れてからmake installできれば幸せなのに。。。
2012/06/13 09:23:07 UTCcutsea110
#
GHC APIってghc-pkg listした時に出てくる(ghc-7.4.2)とかいうパッケージか。
2012/06/13 11:51:41 UTCcutsea110
#
ghc-7.4.1+HP2012.2.0.0で環境を作り直したけど変わらず。
#
ふと思ってghciを起動してそこから:lでロードしたらエラーになった。orz
#
これってどういうコト?
#
emacsもhaskell-modeもghc-modも関係なくてghciの問題?
2012/06/13 12:38:51 UTCcutsea110
#
なんか良く分からんが、別のプログラムでcabal configure --user ; cabal buildは成功するのにghc --make Main.hsだとアウト
#
なんか同じようなところでエラーになるんだよなー
#
l
2012/06/13 14:18:48 UTCcutsea110
#
なんかghciバグバグしてないか??
#
:lとか:mとか微妙な挙動してる気がする
2012/06/13 14:26:10 UTCcutsea110
#
さっきはloadできたのに今はできない。なにか変えたっけかな。
2012/06/13 15:00:35 UTCcutsea110
#
haskell wikiみてたら7.4.1のGHCiも結構問題あったみたいだしghc-modは関係なさげだからとりあえずもう一度7.4.2に上げてみる。
2012/06/13 15:45:54 UTCcutsea110
#
とりあえず7.4.2にupdateしてtransformersやmtlが2バージョン入ってたのを回避したらうまく動作するようになった。
#
依存関係の問題だとすればcabalなのかな。回避できたからいいけど正直不便だわ。