如何在Arrow-kt中创建别名绑定方法?



在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。

你知道我该怎么做吗?Thx

bindEffectScopeRaise(Arrow 2.0快照)中被定义为Either<A, B>的扩展方法。

你可以用不同的方法来做这件事。

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

如果你需要一些帮助,我们可以在Kotlin slack #Arrow channel中找到

最新更新