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