a wandering wolf

Does a wandering wolf dreams of a wondering, sometimes programming sheep?

このエントリーをはてなブックマークに追加

Funcy というライブラリの話

こんにちは。あなたの localhost、ガブさんです。

ここ最近、こんなライブラリを書いていました。

Gab-km/Funcy - GitHub

どんなライブラリかと言いますと、.NET なクラス用に Maybe や Either 型を提供していたり、モノホンより劣りますがパターンマッチ的な制御フローをクラス群で提供していたりします。

対象ユーザー

私のような、 頭のおかしい 関数型チックなあれこれを使いたいけど、お仕事では C# や VB を使わないといけないのよん、という方が少しだけ幸せになれるかもしれないライブラリを目指しました。(少なくとも私は、自分の書いたギョーム系ツールで利用しています)

なお、ピュアな .NET 製ライブラリなので F# から利用することも可能ですが、正直 F# 自身の機能を使ったほうが何倍も便利です。

Why interface?

このライブラリですが、下記のような指摘を頂いていますように、インターフェイス重視の設計方針をとっております。

これ、もちろん意図的にそうしておりまして、例えば Maybe なら「コレコレこういうシグネチャのものを提供していれば、Maybe とみなすよ」ということをやっていて、何か Maybe っぽく動くけど別の性質も持ち合わせているものを定義することも許しています。

きっかけは、Maybe や Either が IDisposable を実装して、using (Java の方だと try-resource かな?)で便利にできないかな?というところから、普通の Maybe/Either とは別に DisposableMaybe/DisposableEither を実装していたことにあります。

これを書く過程で「Maybe/Either っぽく動け」という意図を表す必要があったため、インターフェイス志向なライブラリになっていきました。今はもう Disposable な何かは提供していませんが、過去のコミットの残骸が残っています。

実際、書いていっているうちに、インターフェイスをベースにして設計していった方がどんどん都合が良くなっていったため、このように推し進めた形になっていますね。

ご自由にどうぞ

ご利用いただくのはもちろんのこと、あれこれ議論の俎上にあげていただくのも面白いですし、またプルリクやら何やらも興味があったらどんどんやっていただきたい感じです。すでに、どこかのファンクショナルぺんぎんがコントリビューターに名を連ねている現状があります。

もし興味を持たれた方がいましたら、ご自由に遊んであげてください。