result型
Midoliy |> F#プログラミング

result型とは

option型とは


 F# 4.1 以降では、エラーに耐性のあるコードを書くために result型 が導入されました。result型は、同じくF# 4.1より導入された判別共用体の機能を使用して定義された型です。
 result型には、"Ok" と "Error" という2つのケース値を持っています。対象の値が有効な場合は Ok に値を含め、そうでない場合は Error に値を含めるようにします。
// ------------------
// [ 定義 ]
// ------------------

// FSharp.Coreにおけるresult型の定義
[<StructuralEquality; StructuralComparison>]
[<CompiledName("FSharpResult`2")>]
[<Struct>]
type Result<'T,'TError> = 
    | Ok of ResultValue:'T 
    | Error of ErrorValue:'TError

 この result型 は、通常、F#コミュニティ内で Railway指向プログラミング と呼ばれることが多い "モナドエラー処理" で使用されます。
 次の簡単な例は、この "Railway指向" な処理方法を示しています。

 
 上記の例のように、validate関数の実装を強制的にresult型を返すようなインターフェースとすれば、関数を連鎖させることは非常に簡単です。こうすることによって、このようなvalidate機能を必要に応じて、最小限のチェックをする小さな部品に分割できます。 これは、実際の値を利用する際に、パターンマッチの使用を強制できるという付加価値もあります。これにより、プログラムの正確性を高めることができるのです。