猫应用将"空"值提升为一个选项



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

import cats._, cats.data._, cats.implicits._
Applicative[Option].pure(List.empty[String])

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

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

为了能够做到这一点,你需要将 Voidtiness 实现为类型类。那么电梯的实现将非常简单

def liftOption[A : Empty](a: A): Option[A] = 
if (Empty[A].isEmpty(a)) None else Some(a)

有一些关于是否将其放入猫的讨论,现在它驻留在小巷猫中

然后实际上你可以把它扩展到每一个可以EmptyApplicative(你可能需要一些调整来使类型与 Empty 匹配,但这说明了这个想法(:

def liftE[A: Empty, F[_]: Applicative, Empty](a: A): F[A] = 
if (Empty[A].isEmpty(a)) Empty[F]
else Applicative[F].pure(a) 

最新更新