1

http://www.yesodweb.com/book/conduitsのコードを理解しようとしています。いくつかの修正 ( に置き換えるなど) の後ResourceMonadResourceも、コンパイルされません。

sumSink :: MonadResource m => Sink Int m Int
sumSink = CL.fold (+) 0

sum' :: [Int] -> Int
sum' input = runST $ runResourceT $ CL.sourceList input $$ sumSink

次のエラーが表示されます。

    Couldn't match type `GHC.ST.ST s' with `IO'
    When using functional dependencies to combine
      Control.Monad.Trans.Control.MonadBaseControl
        (GHC.ST.ST s) (GHC.ST.ST s),
        arising from the dependency `m -> b'
        in the instance declaration in `Control.Monad.Trans.Control'
      Control.Monad.Trans.Control.MonadBaseControl IO (GHC.ST.ST s),
        arising from a use of `runResourceT'
        at D:\Works\stablename\test.hs:43:22-33
    In the expression: runResourceT
    In the second argument of `($)', namely
      `runResourceT $ CL.sourceList input $$ sumSink'

私はGHC 7.4.1とconduit-0.4.2を使用しています。

PS 壊れていないチュートリアルや、conduit-0.4 を念頭に置いて書かれたチュートリアルはありますか?

4

1 に答える 1

1

私自身の質問に答える:

  • Monad mの代わりに使用する必要がありResource mます。
  • runResourceTが必要であり、のインスタンスがないsinkFileため、チェーンのどこかでのような関数が使用された場合は、を適用する必要があります。sinkFileMonadResource mMonadResource IO
于 2012-06-27T11:33:00.260 に答える