ZeroFormatter.FSharpExtensionsのF# 4.1対応

FSharp.Core 4.1.0がNuGetにpublishされていたので、ZeroFormatter.FSharpExtensionsでF# 4.1の型を扱えるようにしました。 ついでにプロジェクト構成を.NET Core SDK RC4のものに全面修正しています。

NuGet Gallery | ZeroFormatter.FSharpExtensions 0.3.0

いやまぁ、正確には.NET Coreでのビルドに失敗していて(ビルドは通るけど空のdllができていた…)対応せざるをえなかっただけなんですけどね(ひどい)。

対応した型

  • struct tuple
    • 内部的にはSystem.ValueTuple
    • Nullableは非対応
  • struct record
  • struct union
    • Resultはここに属する

わかりやすいですね。

Nullableなstruct tuple用のFormatterを用意しなかったのはF#だからOptionでいいんじゃない、みたいな理由です。 C# 7のことを考えれば本家がValueTupleをサポートすべき事案なのですが、忙しそうなのでいつ次のバージョンがリリースされるかわからない…。 pull reqしようにも.NET Core SDK preview2が手元にないのでビルドもままならないので「project.jsonめ…」という気持ち。

余談

.NET Core対応させようとしたときに下記の問題にぶつかりました。

https://github.com/Microsoft/visualfsharp/issues/2455

FSharp.Core 4.1.0のnetstandard1.6ではFSharp.Reflection.FSharpTypeFSharp.Reflection.FSharpValueのいくつかのメソッドが存在せず、型拡張で定義されているメソッドにはC#からアクセスできないのでレコードや判別共用体を判定する手段がなくあわや詰みかけたという…。 C#からF#用のメソッドを呼び出す人はそうそういないので気付かないのも仕方ない。 幸いドンさんから回避策を教えていただけたのと(ただしリフレクションを使う…)、F#自体にも変更がはいったのでバージョンがあがれば心配しなくてすみます。

それにしてもこのライブラリ、開発中にいろんなものを踏み抜くなぁ。