我有以下代码:
def foo: OptionT[Future, String] = OptionT(Future.successful("foobar"))
def f: String => Option[Int] = s => Some(s.length)
我正在scalaz库中寻找在foo之后组成f的内容,但是OptionT
(flatMap
和flatMapF
)中只有两个flatMap实现,而两者都没有我正在寻找(A => Option[B])
的签名。
我可以很容易地自己实现它,例如,对于任何OptionT(foo.run.map(_.flatMap(f)))
F来说,Functor
,或者对于Future而言,foo.flatMap(e => Future.succesful(f(e)))
,或者对此特别是Applicative
来说,都是如此,该方法首先丢失了吗?这似乎是非常基本的功能。是我缺少的导入文件,还是在scalaz库中的其他地方实现了此功能?
谢谢
编辑:我看到Cats在subFlatMap
https://github.com/typelevel/cats/blob/master/core/src/main/scala/cats/data/OptionT.scala#L54下包含了此方法。