首页 > 解决方案 > FlatMapping ListK 和选项

问题描述

我不能ListKOf<T>T -> Option<V>.

例如

listOf(1,2,3).k().flatMap { i ->
  if (i % 2 == 0) Some(i) else None
}

报告Required (Int) -> ListKOf<Int>. Found (Int) -> Option<Int>

要使其编译,我需要这样做:

listOf(1,2,3).k().flatMap { i ->
  val opt = if (i % 2 == 0) Some(i) else None
  opt.toList().k()
}

是否可以像前面的例子一样编写函数?

标签: kotlinarrow-kt

解决方案


@dyukha 上面的回答是最简洁的方式,但要具体回答您的问题:flatMap在单一单子类型中运行;也就是说,如果你想调用flatMapa ,你需要从提供给;的函数List中返回 a 如果要调用an ,则需要从提供给;的函数中返回 an 等等,等等。最接近的代码(不使用)是一种返回零或一个元素的方法,而不是或。ListflatMapflatMapOptionOptionflatMap.mapFilter()ListSome(x)None


推荐阅读