Cats applicative将`empty`值提升为一个选项

时间:2017-08-11 07:33:06

标签: scala scala-cats

我想知道是否有一种方法可以将值提升到Option中,同时具有空虚的概念,例如

import cats._, cats.data._, cats.implicits._

Applicative[Option].pure(List.empty[String])

给出

res1: Option[List[String]] = Some(List())

但是在这种情况下我不会返回None因为列表为空。对于空字符串也很有用。

1 个答案:

答案 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)