TypeProviderでコンピュテーション式用の型を生成してみた #FsAdvent

この記事はF# Advent Calendar 2015の25日目の記事です。

TypeProviderを使う

今までチュートリアルくらいしかTypeProviderは作ったことはなかったのですが、ようやく重い腰をあげて使うことにしました。

型プロバイダー(TypeProvider)のちょっとしたアレコレ - Bug Catharsis

ぜくるお兄さんの記事、とても参考になるので何回も読み直してます。

コンピュテーション式とTypeProvider

コンピュテーション式のビルダーは単なる型なので、TypeProviderの対象にできますね?

というわけで今回は、以下のことをやってみようということに。

これ一年半くらい前の発言なのですね…。

結論

できなくはないけど、できることが限られていてつらいorz

https://github.com/pocketberserker/ComputationExpressions/tree/56f5f9dee7ecfaf77fd11cb79c6532727232427a

このリポジトリのコードを読んでいただけるとわかると思うのですが、Generic MethodがTypeProviderで生成できない関係で単一の型でしかbindできなかったり、その関係でdo!が使えなかったりと、少なくともMonadTypeProviderみたいな汎用的なものは厳しい印象です。

逆に考えると、ジェネリックさえからませなければわりとやりたい放題できるということがわかったので、なんか色々と模索したいところです。

当分はカスタムオペレータの方向で模索してみます。