Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Cats应用程序将“空”值提升到选项中_Scala_Scala Cats - Fatal编程技术网

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)