平々毎々(アーカイブ)

はてなダイアリーのアーカイブです。

続々・C#のジェネリクスで型クラスを真似る

前回のエントリ

F# で高階型のエミュレーション - pocketberserkerの爆走」およびその記事で紹介されているhighjを参考にするとこんな感じになるだろうか。

GitHub Gist

前回のエントリだと、値クラスMaybe<T>は抽象クラスMonad<T>を継承していたが、この実装だとメソッドを持たないマーカーインターフェース_<T, TValue>を実装するだけだからシンプルだと思う。ただし、型クラスもどきインスタンスを意識的に渡す必要はある。

また、これは前回のエントリと同じだけど、型クラスもどきのメソッドを呼び出すたびにMonad<Maybe.µ, T>Functor<Maybe.µ, T>にアップキャストされてしまうので明示的なダウンキャストでMaybe<T>に戻さないといけなくなる。