Scala 3 类型与 monad

发布于 2025-01-16 11:52:56 字数 558 浏览 3 评论 0原文

我有类似:

type RawListResponse[T] = Either[ResponseException[String, circe.Error], List[T]]
type RawOptionResponse[T] = Either[ResponseException[String, circe.Error], Option[T]]

用于转换器的东西:

given convList[T]: Conversion[RawListResponse[T], MyListResponse[T]] with

    def apply(
        raw: RawListResponse[T],
    ): MyListResponse[T] = raw.left.map { (respExc: ResponseException[String, circe.Error]) =>
      respExc.getMessage
    }

将其合并到一个 F[_] 中会很好。而不是使用选项、列表等转换器。

有什么想法吗?谢谢!

I have smth like:

type RawListResponse[T] = Either[ResponseException[String, circe.Error], List[T]]
type RawOptionResponse[T] = Either[ResponseException[String, circe.Error], Option[T]]

which are used in converters:

given convList[T]: Conversion[RawListResponse[T], MyListResponse[T]] with

    def apply(
        raw: RawListResponse[T],
    ): MyListResponse[T] = raw.left.map { (respExc: ResponseException[String, circe.Error]) =>
      respExc.getMessage
    }

would be nice to merge it into one F[_]. Instead of having converters for Options, Lists etc.

Any ideas ? thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

唔猫 2025-01-23 11:52:56

好的,我找到了解决方案:

type RawHKResponse[T, F[_]] = Either[RawHKResponse[String, circe.Error], F[T]]
type MyHKResponse[T, F[_]] = Either[String, F[T]]


given convHigherKinded[T, F[_]]: Conversion[RawHKResponse[T, F], MyHKResponse[T, F]] with

def apply(
    raw: RawHKResponse[T, F],
): MyHKResponse[T, F] = raw.left.map { (respExc: ResponseException[String, circe.Error]) =>
  respExc.getMessage
}

ok I found the solution:

type RawHKResponse[T, F[_]] = Either[RawHKResponse[String, circe.Error], F[T]]
type MyHKResponse[T, F[_]] = Either[String, F[T]]


given convHigherKinded[T, F[_]]: Conversion[RawHKResponse[T, F], MyHKResponse[T, F]] with

def apply(
    raw: RawHKResponse[T, F],
): MyHKResponse[T, F] = raw.left.map { (respExc: ResponseException[String, circe.Error]) =>
  respExc.getMessage
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文