首页 > 解决方案 > arrow-kt 中是否有类似 ap2、ap3 的功能?

问题描述

我在这篇文章中看到了使用的scala 代码。

val a = Some(7)
val b = Some(9)
Applicative[Option].ap2(Some(add))(a,b)

我尝试将此代码迁移到 kotlin 和箭头,如下所示。

Option.applicative()
        .tupled(Some(7), Some(9))
        .ap(Some(::add))

// works but dirty
fun add(tuple: Tuple2<Int, Int>): Int = tuple.a + tuple.b

// not work, compilation error
// fun add(a: Int, b: Int): Int = a + b

正如您所注意到的,Tuple2必须在add函数签名中指定。查了arrow的官方文档,没有apNap2、ap3、ap4这样的功能。

有没有办法使用不包含Tuple2类型的第二个函数?

标签: kotlinarrow-kt

解决方案


一旦 0.10 版可用,Arrow 将有一个.tupled()处理此问题的函数类型的方法,因此您将能够编写:

Option.applicative()
      .tupled(Some(7), Some(9))
      .ap(::add.tupled())

fun add(a: Int, b: Int) = a + b

对于最多 22 个参数的函数。


推荐阅读