SuperAPI AI 工具集

cats-mtl-typed-errors

编程与开发

查看项目

更新于 10-15 19:54

技能介绍

用途:在 Scala 中设计自定义领域错误类型,用 Cats MTL 的 Raise/Handle 能力替代 EitherT 或 IO[Either[E, A]],同时保持 Cats Effect 的资源与并发语义。

主要能力:用 Raise[F, E] 在可抛错函数中声明错误通道;用 Handle.allow/rescue(Scala 3)或 Handle.allowF(Scala 2)引入作用域错误能力并按 try/catch 方式处理;错误类型可继承或不继承 Throwable,视上下文而定。

使用方式:将领域错误建模为 sealed ADT(Scala 2)或 enum(Scala 3);在有效果代码中要求 Raise[F, E] 以及 Monad[F] 或 Applicative[F];用 .raise 抛错、pure 返回成功值;在边界用 Handle.allow/allowF 建立作用域,再用 .rescue 显式处理各错误分支。F[_] 可选,可写 IO 专用代码或保留多态。纯函数返回 Either[E, A] 适合 API 边界,需要时再提升到 F。

适用场景:需要类型化错误通道、又不想引入转换器栈的 Cats Effect 项目;Scala 2 与 Scala 3 均可,Scala 3 建议用 using 与上下文函数配合 allow,类型推断更好。

限制与注意:避免仅为类型化错误而使用 EitherT;避免 sealed 继承链,改用组合(包装 case class)建模错误层级。Scala 2 需显式隐式参数,代码更冗长。详细语法与理由见 references/custom-error-types.md。