続々・C#のジェネリクスで型クラスを真似る
「F# で高階型のエミュレーション - pocketberserkerの爆走」およびその記事で紹介されているhighjを参考にするとこんな感じになるだろうか。
前回のエントリだと、値クラスMaybe<T>は抽象クラスMonad<T>を継承していたが、この実装だとメソッドを持たないマーカーインターフェース_<T, TValue>を実装するだけだからシンプルだと思う。ただし、型クラスもどきインスタンスを意識的に渡す必要はある。
また、これは前回のエントリと同じだけど、型クラスもどきのメソッドを呼び出すたびにMonad<Maybe.µ, T>やFunctor<Maybe.µ, T>にアップキャストされてしまうので明示的なダウンキャストでMaybe<T>に戻さないといけなくなる。