2017-11-19 13 views
2

私はちょっと遊んで、conduitを理解しようとしています。Monadic conduit mapはストリームを分割します

runConduit $ yield "abc" .| mapMC id .| sinkList 

を実行すると["a", "b", "c"]を与えながら

runConduit $ yield "abc" .| mapC id .| sinkList 

を実行すると、["abc"]を与えます。

なぜモナドバージョンでストリームが分割されますか?

答えて

3

これはここで遊ぶタイプと関係があります。 mapCは、タイプa -> bのファンクションを期待していますが、mapMCは、 mの一部のインスタンスではa -> m bを予期しています。どちらの場合も、その関数としてidを使用しています。したがって、入力した入力はすべて最初の例ではb、次の例ではm bとして扱われます。 、

  • 文字
  • 単一文字のモナド変換である第2の例のリスト上の純粋な変換である第1の例:あなたが降伏している値の型[Char]であるので、これはに壊れますリストモナド

あなたは2番目の例では、最初と同じ振る舞いpure(またはreturn)とidを交換したい場合は内部。

関連する問題