関数のシグネチャでエフェクトを文書化する
Result 型を用いて、失敗する可能性があることを示す
code:fsharp
type ValidateOrder =
UnvalidatedOrder -> Result<ValidatedOrder, ValidationError list>
type ValidationError = {
FieldName : string
ErrorDescription : string
}
FP では、エフェクト という言葉を使って、関数が主な出力以外に行うことを説明する。 Result
エラーエフェクトを持つ可能性があることを文書化
Async
複数のエフェクトを組み合わせることも可能
code:fsharp
type ValidateOrder =
UnvalidatedOrder -> Async<Result<ValidatedOrder, ValidationError list>>
ただし、すべてのエフェクトを書くと分かりづらい
型エイリアスを活用する
code:fsharp
type ValidationResponse<'a> = Async<Result<'a, ValidationError list>>
type ValidateOrder =
UnvalidatedOrder -> ValidationResponse<ValidatedOrder>