継続でエフェクトを抽象化する:Gleamによる実践ガイド
Abstracting Effects with Continuations
エラーを値として扱うResultや非同期を表すPromiseは、計算の特定の側面を追跡します。継続(continuation)を使うと、これらの詳細を一般化できます。Filinskiの証明(1994)によれば、継続は任意のモナドを表現可能です。この記事では、Gleamで継続を使って、直接・失敗可能・非同期など異なる種類の計算を扱うビジネスロジックを単一の関数に抽象化する方法を、具体例を通して解説します。fetch関数の実装を差し替える「ランナー」パターンにより、コードの重複を排除し、新しいエフェクトにも柔軟に対応できます。
継続を使うということは、「どうやって値を手に入れるかは知らないが、手に入れたら次にこれをやる」と言っているようなものです。