我想知道是否有一种方法可以将值提升到Option中,同时具有空虚的概念,例如
import cats._, cats.data._, cats.implicits._
Applicative[Option].pure(List.empty[String])
给出
res1: Option[List[String]] = Some(List())
但是在这种情况下我不会返回None
因为列表为空。对于空字符串也很有用。
答案 0 :(得分:0)
为了能够做到这一点,你需要实现作为类型类的空虚。然后实施电梯将非常简单
def liftOption[A : Empty](a: A): Option[A] =
if (Empty[A].isEmpty(a)) None else Some(a)
有一些discussions关于将它放入猫或不是,现在它位于alleycats
然后实际上你可以将它扩展到每个Applicative
Empty
(你可能需要一些调整来使类型匹配为Empty,但这说明了这个想法):
def liftE[A: Empty, F[_]: Applicative, Empty](a: A): F[A] =
if (Empty[A].isEmpty(a)) Empty[F]
else Applicative[F].pure(a)