cats-mtl-typed-errors について
cats-mtl-typed-errors は、Cats MTL で型付きエラーを扱う Scala 向けスキルです。関数シグネチャでエラー機能を表し、スコープ境界で処理する方法を、Scala 2 と Scala 3 の例で説明します。
主な機能
- 01Raise[F, E] による型付きエラー
- 02Handle によるスコープ内処理
- 03Scala 2 と Scala 3 のパターン
- 04純粋な Either との相互運用
- 05トランスフォーマーの積み重ねを回避
活用シーン
- 01Scala のドメインエラーのモデル化
- 02エフェクト境界でのエラー処理
- 03API でのエラー型の明示
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ alexandru/ skills --skill cats-mtl-typed-errorsインストール後、Claude Code で/cats-mtl-typed-errorsを入力して読み込まれたか確認します。
同梱ファイルreferences/custom-error-types.md
詳細
Cats MTL の型付きエラー(Scala)
クイックスタート
- ドメインエラー型を定義します。状況に応じて
Throwableを拡張しても、しなくてもかまいません。 - エラーを発生させる可能性がある関数では、Cats MTL の
Raise[F, E]を使用します。 Handle.allow/rescue(Scala 3)またはHandle.allowF(Scala 2)を使って、エラー機能をスコープ内で導入し、try/catch のように処理します。IO[Either[E, A]]より Cats MTL を優先し、EitherT[IO, E, A]は避けます。API 境界で純粋関数がEither[E, A]を返すのは問題ありません。F[_]は任意です。プロジェクトに応じて、IO固有のコードを書くことも、ポリモーフィズムのためにF[_]を使うこともできます。
ワークフロー
- ドメインエラーを sealed ADT(Scala 2)または enum(Scala 3)としてモデル化します
- エラーを発生させる可能性があるエフェクトフルなコードでは、
Raise[F, E](およびMonad[F]またはApplicative[F])を要求します。 .raiseでエラーを発生させ、成功値はpureで返します。- 境界で
Handle.allow(Scala 3)またはHandle.allowF(Scala 2)を使い、エラーの発生が有効なスコープを作成します。 .rescueでスコープを閉じ、各エラーケースを明示的に処理します。- モノファンクターのエラーチャネルを維持して、Cats Effect のリソースおよび並行性のセマンティクスを保ちます。
適用するパターン
- シグネチャ内の型付きエラー:エラー型パラメーター
Eを、関数シグネチャ内のチェック例外チャネルとして扱います。 - スコープ付きのエラー機能:失敗する可能性のある関数では
Raise[F, E]を要求します。エラーからの回復も必要な場合はHandle[F, E]を使用します。 - Scala 3 の使いやすさ:
usingとallowを使ったコンテキスト関数を優先します。型推論が大幅に改善されます。 - Scala 2 との互換性:
allowFと明示的な implicit パラメーターを使用します。波括弧や明示的な型が増えることを想定してください。 - 純粋コードとの相互運用:解析や検証には純粋な
Either[E, A]を使い、必要に応じてFにリフトします。 - トランスフォーマーのスタックを避ける:型付きエラーチャネルを得るためだけに
EitherTを使わないでください。Cats MTL はスタックなしでこの機能を提供します。 - sealed 同士の継承を避ける:エラー階層は sealed の継承チェーンではなく、合成(ラッパーのケースクラス)でモデル化します。
参考資料
- 詳しいガイダンス、Scala 2/3 の構文、および Typelevel の記事に基づく根拠については、
references/custom-error-types.mdを読み込んでください。
コメント
Markdown 対応