Scala Cats应用程序将“空”值提升到选项中
例如,我想知道是否有一种方法可以将价值提升到期权中,同时又有一种空的概念Scala Cats应用程序将“空”值提升到选项中,scala,scala-cats,Scala,Scala Cats,例如,我想知道是否有一种方法可以将价值提升到期权中,同时又有一种空的概念 import cats._, cats.data._, cats.implicits._ Applicative[Option].pure(List.empty[String]) 给予 但是在这种情况下,我不希望返回None,因为列表是空的。空字符串也很有用。要做到这一点,需要将空性实现为typeclass。那么lift的实现就相当简单了 def liftOption[A : Empty](a: A): Option[
import cats._, cats.data._, cats.implicits._
Applicative[Option].pure(List.empty[String])
给予
但是在这种情况下,我不希望返回
None
,因为列表是空的。空字符串也很有用。要做到这一点,需要将空性实现为typeclass。那么lift的实现就相当简单了
def liftOption[A : Empty](a: A): Option[A] =
if (Empty[A].isEmpty(a)) None else Some(a)
有一些关于把这个放在猫身上或不放在猫身上的,现在它居住在猫身上
然后,实际上您可以将其扩展到每个应用程序
,这些应用程序可以是空的
(您可能需要进行一些调整以使类型与空匹配,但这说明了这一想法):
如果您只关心列表的大小写,那么实际上可能需要使用
NonEmptyList
:val res:Option[NonEmptyList[String]=NonEmptyList.fromList(list)
def liftOption[A : Empty](a: A): Option[A] =
if (Empty[A].isEmpty(a)) None else Some(a)
def liftE[A: Empty, F[_]: Applicative, Empty](a: A): F[A] =
if (Empty[A].isEmpty(a)) Empty[F]
else Applicative[F].pure(a)