Haskell Quiz No.7

難易度: λλ

以下の Conduit を使ったコードの実行結果を予想してみてください!

答えは次回

はじめに

前回の問題と答えは以下の通りです。

問題

難易度: λλ

以下の Conduit を使ったコードの実行結果を予想してみてください!

こたえ

実際に実行してみましょう!

$ ./Quiz6.hs
2
3
4
5
6
12
14
16
18
20

Haskell Quiz No.6 の解説

この問題で重要なのは trans 関数です。

  • 1つめのパイプ takeC 5 .| mapC (+ 1) によって [1..10] のうち [1..5]mapC (+ 1) によって処理されます。
  • 2つめのパイプ mapC (* 2) によって残りの [6..10]mapC (* 2) によって処理されます。

そのため、結果として以下のような出力となりました。

大前提として、このパイプにデータが流れるのは mapM_C print によって上流のデータが無くなるまでデータを要求するという操作があるためです。

そのため、 mapM_C printsinkNull にすると何も表示されなくなります。

まとめ

Conduit は何も知らずにいつも通りの感覚で利用すると、直感と違う動きをすることがあるので、簡単な例を通して慣れていくと良いと思います。

以上です。