F# 4.1のResult型

この記事はF# Advent Calendar 2016の6日目のものです。 穴埋め用記事です。

qiita.com

今回はF# 4.1から標準となるResult typeの話です。

https://github.com/fsharp/fslang-design/blob/8ee13305a7ac559a4c0396681e9501120bbb567e/FSharp-4.1/FS-1004-result-type.md

ケース名をどうするかみたいな話がありますが、最終的には以下の形に落ち着いたようです。

type Result<'T,'TError> =
    | Ok of 'T 
    | Error of 'TError

また、ResultモジュールにはbindmapmapErrorが定義されています。

さて、標準から成功/失敗を表す型が提供されたのでめでたしめでたし…というわけにはいきません。

  • ライブラリ側は古いF#ともおつきあいしなければならない関係上、独自のResultやChoiceが消えることは当分ないはず
    • F# 4.1と全く同じ型、関数を提供するライブラリをつくって古いバージョンでも同じように書けるようにする手もあるが、うーん?
  • アプリケーション側はある程度置き換わるはず…とはいえ関数が足りないのでオレオレライブラリが氾濫する可能性は残されている

まぁ、もうすぐ2016年は終了するわけですし、2017年はF# 4.0以下を窓から投げ捨てる覚悟をしても良いかもしれませんね?