TL;DR
- 各ステップの入出力の型が一致しないので、ステップからワークフローを合成するのは難しい。
- 解決策は、関数合成、第9章 Implementation: Composing a Pipeline、第10章 Implementation: Working with Errors で扱う。
内容
Modeling Workflows as Pipelines の一節である。
型を使ったワークフローの各ステップのモデリングとエフェクトの文書化で作ったステップを合成して、ワークフロー全体を組み立てたい。しかし、これは一筋縄ではいかない。依存関係を無視して、各ステップの入出力だけを並べてみる。
// 検証
type ValidateOrder =
UnvalidatedOrder -> AsyncResult<ValidatedOrder, ValidationError>
// 価格設定
type PriceOrder = ValidatedOrder -> Result<PricedOrder, PricingError>
// 注文確認
type Acknowledgment = PricedOrder -> Async<OrderAcknowledgmentSent option>
// 返すイベントの作成
type CreateEvents = PricedOrder -> PlaceOrderEvent list入出力の型がまったく一致していないので、このままでは合成できない。これは型駆動設計でよく起こる問題である。ステップどうしに互換性を持たせ、互いに合うようにする必要がある。