箭头kt中是否有ap2,ap3之类的功能?

时间:2019-07-10 06:23:40

标签: kotlin arrow-kt

在此cats中,我看到了使用post的scala代码。

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

然后我尝试将这段代码迁移到象下面这样的kotlin和arrow。

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的官方文档,但是没有apN函数,如ap2,ap3,ap4。

是否可以使用不包含Tuple2类型的第二个功能?

1 个答案:

答案 0 :(得分:1)

一旦版本0.10可用,Arrow就会在处理此问题的函数类型上提供一个.tupled()方法,因此您可以编写:

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

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

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