我无法用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()
}
是否可以像前面的示例一样编写函数?
答案 0 :(得分:0)
@dyukha的回答是最简洁的方法,但是要专门回答您的问题:flatMap
在单个monadic类型中起作用;也就是说,如果要在flatMap
上调用List
,则需要从提供给List
的函数中返回flatMap
;如果要在flatMap
上调用Option
,则需要从提供给Option
的函数中返回flatMap
;最接近的代码(不使用.mapFilter()
)是一种返回List
的元素为零或一个而不是Some(x)
或None
的方法。