関数のシグネチャでエフェクトを文書化する
from 関数によるワークフローのモデリング
Result 型を用いて、失敗する可能性があることを示す
省略可能な値、エラー、およびコレクションのモデリング#6690c9d675d04f0000001280
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>