machinecell-3.0.0リリース
「なんか告知に使えるかも」と思って残しておいたブログだけど、 よく見たらmachinecellとか暗黒定数式とか勉強会とかの告知すらしてないな。
これまでのあらすじ
Haskellのストリーミングライブラリmachinecellの過去の紹介記事は、qiitaの方にあります。
しかし例のコードが古いので、githubのサンプルでも見て頂ければ。
要約すると「conduit/pipes/machines系のライブラリだけど、アロー記法が使えるよ、なのでFRPっぽいのもいけるよ!」というライブラリだと思って頂ければ間違いないです。
3.0.0の変更点
という訳で、このブログでは初エントリですが3.0.0です。
machinecell: Arrow based stream transducers | Hackage
3.0.0ではAPIに大きな変更点はない(むしろ減ってる)のですが、内部構造をブラッシュアップした結果として「ProcessAのloopがベースのloopに依存しなくなった」という大きな改善があります。
loopというのはArrowLoopのインスタンス関数で、Monadで言うところのMonadFixのmfixに相当します。
2.Xのloopはベースのloopに依存しているので、loopの動きに影響されやすい、という問題がありました。たとえば基底がKleisli IOの場合にループと副作用を混ぜると、未来の値を参照している訳ではないにもかかわらず、indefinite MVar access例外が発生してしまいます。そのためこのexampleでは、108行目のrecステートメントにおいて、副作用のあるWxC.bindをループの外に隔離しています。
3.0.0では、基底のloopを呼ばなくなっているので、普通にrecステートメントの中に全部書いてしまってOKです。
これにより、loopを純粋に「フィードバックループ、ないしは局所状態の定義」という目的に使う事ができるようになっています。