【问题标题】:How to create an alias to bind method in Arrow-kt?如何在 Arrow-kt 中创建别名以绑定方法?
【发布时间】:2023-01-14 08:14:20
【问题描述】:

在 Arrow-kt 中,我想为 bind() 创建一个别名 - 用于一种使用 Arrow 的自定义库。

我希望以下内容起作用,但它不起作用:

suspend fun <F, S> Either<F, S>.bindMy(): S = this.bind()

我想要定位的方法是

public interface EffectScope<in R> {
  ...
  public suspend fun <B> Either<R, B>.bind(): B

我想由于 EffectScope,它无法像我预期的那样工作。

知道我怎样才能让它发挥作用吗? 谢谢

【问题讨论】:

    标签: kotlin arrow-kt


    【解决方案1】:

    bindEffectScopeRaise(Arrow 2.0 快照)中定义为Either&lt;A, B&gt; 的扩展方法。

    你可以用不同的方式来解决这个问题。

    1. 如果您在 JVM 中,请使用即将推出的上下文接收器功能。
      context(EffectScope<E>)
      fun <E, A> Either.myBind(): A = fold({ shift(it) }, ::identity)
      
      1. 扩展 EffectScope 接口并定义折叠机制,就像 Arrow 对 EffectScopeEffect 所做的那样。不幸的是,在上下文接收器可用之前,这是一个更重量级的解决方案。如果您使用 2.0 快照,所有这些都更简单,您将需要提供类似的机制,如 RaiseEffect

      如果您需要任何帮助,我们可以在Kotlin slack#Arrow 频道闲逛

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多