FlatMapping ListK和Option

时间:2019-06-25 05:06:53

标签: kotlin arrow-kt

我无法用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()
}

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

1 个答案:

答案 0 :(得分:0)

@dyukha的回答是最简洁的方法,但是要专门回答您的问题:flatMap在单个monadic类型中起作用;也就是说,如果要在flatMap上调用List,则需要从提供给List的函数中返回flatMap;如果要在flatMap上调用Option,则需要从提供给Option的函数中返回flatMap;最接近的代码(不使用.mapFilter())是一种返回List的元素为零或一个而不是Some(x)None的方法。