scala-cats相关内容
onSO解释了为什么像scalaz、cat(Scala)或Arrow(Kotlin)这样的验证不能是Monad。 据我所知,这是因为他们根据应用函数器对Monad进行了建模,并且将验证的期望行为作为应用(集合所有无效)与将验证作为Monad的期望行为(序列验证和在第一个无效时快速失败)不同。因此,当您希望快速失败时,需要将验证转换为任一验证(这是一个单体)。 在https://groups
..
我在尝试解决方法的结果时遇到了一个问题。更具体地说,我有: def methodA(): Future[Either[Error, Seq[A]]] 在某个时刻,我想为列表中的每个元素调用此方法并合并结果。 大概是这样的: val tes: Seq[Future[Either[Error, Seq[A]]]] = relevantRounds.map(round =>
..
给定一个 Seq[Either[String,A]] 的序列,其中 Left 是一条错误消息.我想获得一个 Either[String,Seq[A]],在那里我得到一个 Right(这将是一个 Seq[A]), 如果序列的所有元素都是 Right.如果至少有一个 Left(错误消息),我想获取第一条错误消息或所有错误消息的串联. 当然,您可以发布 cat 或 scalaz 代码,但我也对不使
..
我想知道如何在 Scala 中将 List[Try[T]] 转换为 Try[List[T]]? 我曾尝试使用累加器并向右折叠,但似乎并不理想. 解决方案 使用猫就这么简单: 导入猫._导入cats.data._导入 cat.implicits._导入 scala.util.{尝试,成功,失败}val 尝试: List[Try[Int]] = List(Success(1), Suc
..
这个答案https://stackoverflow.com/a/56366311/2682459 展示了如何使用对象以在使用 Kitten 时提供类型类的自定义实现.将相同的原理应用于以下代码虽然不起作用: 包com.xxx.yyy.zzz导入cats._、cats.derived._、cats.implicits._对象测试扩展应用{案例类内部(双:双)案例类外部(内部:内部,s:字符串)隐式
..
我几乎完全从此处找到的“派生展示"示例中获取了以下代码:https://github.com/milessabin/kittens 导入cats._、cats.derived._、cats.implicits._对象测试扩展应用{案例类地址(街道:字符串,城市:字符串,州:字符串)case class ContactInfo(phoneNumber: String, address: Addre
..
我知道我可以编写 Apply 来处理嵌套结构,就像在 def mapAll[A, B, C, D](o1: List[Option[A]],o2:列表[选项[B]],o3:列表[选项[C]])(f: (A, B, C) => D):列表[选项[D]] = {进口猫._导入 cat.implicits._Apply[List].compose[Option].map3(o1, o2, o3)(f)
..
我有以下代码片段,但未编译: trait 环境[F[_]] {def get(v: EnvVariable): F[Option[EnvValue]]}最终类 LiveBadEnvironment[F[_] : Sync] 扩展 Environment[F] {覆盖 def get(v: env.EnvVariable): F[Option[env.EnvValue]] = None.pure[
..
我正在尝试使用 Cats 数据类型 Ior 来累积使用服务的错误和成功(可能返回错误). def find(key: String): F[Ior[NonEmptyList[Error], A]] = {(为了 {b Ior.leftNel(另一个错误)}}def findMultiple(keys: List[String]): F[Ior[NonEmptyList[Error], List[
..
我知道我可以遍历Lists 导入cats.instances.list._进口cats.syntax.traverse._def doMagic(item: A): M[B] = ???val 列表:列表[A] = ???val 结果:M[List[B]] = list.traverse(doMagic) 我可以将 Seq 来回转换为 List val seq: Seq[A] = ???va
..
我正在使用 Parallel 类型类来收集所有验证错误: def getNonEmptyStr[M[_]](key: String)(隐含的E: MonadError[M, Errors],A: ApplicativeAsk[M, Params],W: FunctorTell[M, List[String]]): M[字符串] = ???def getInt[M[_]](key: String)
..
如果我们有这样两个函数... def findUserById(id: Long): Future[Option[User]] = ???def findAddressByUser(user: User): Future[Option[Address]] = ??? ...然后我们可以使用cats OptionT monad 转换器来轻松地编写理解它们: for {用户 我想以这种方式组
..
我正在尝试为具有多个类型参数的类型实现一个cats Monad 实例.我查看了cats Either 实例,看看它是如何在那里完成的.下面复制了来自猫的 Either Monad 实例代码的一部分: 导入cats.Monad对象要么Monad {隐式定义实例[A]:Monad[Either[A, ?]] =新的 Monad[Either[A, ?]] {def pure[B](b: B):Eit
..
阅读 cats 库时函子源码,没看懂toFunctorOps函数返回类型后面的curl块是干什么的;我的猜测是这个块将作为构造函数的一部分执行?如果是这样,那么为什么类型 TypeClassType 用相同的代码定义了两次 type TypeClassType = Functor[F]? trait Ops[F[_], A] extends Serializable {type TypeCla
..
我有一个方法的结果:val res: Future[Int] Xor Future[String] = getResult(x) 并想对其进行转换并将其用作Future[Int Xor String] 我无法从 牧猫博客 并且不确定 monad 转换器是否是这里的正确工具,也许是某种形式的 traverse? 来自cats 的 Xor 代表任何分离.Scalaz \/ 或 stdl
..
我正在尝试开始在我的项目中使用免费的 monad,并且我正在努力使其优雅. 假设我有两个上下文(实际上我有更多) - Receipt 和 User - 两者都对数据库进行操作,我想将它们的解释器分开并组合它们在最后一刻. 为此,我需要为每个操作定义不同的操作,并使用 Coproduct 将它们组合成一种类型. 这是我经过几天的谷歌搜索和阅读后的结果: //收据密封性状 ReceiptOp[
..
我写了这段代码,它编译得很好 for {list : List[Int]
..
我正在尝试围绕 Cats 中的 Semigroupals 进行研究.以下是“Scala with Cats"中的陈述:下划线. cats.Semigroupal 是一个允许我们组合上下文的类型类 trait Semigroupal[F[_]] {def product[A, B](fa: F[A], fb: F[B]): F[(A, B)]} 参数fa 和fb 相互独立:我们可以在将它们
..
如果我有一个 Future[Either[String, Int]] 表示可能的错误消息 (String) 或成功的计算 (Int),将 Future 的潜在故障作为错误消息移到左侧很简单: def handleFailure(fe: Future[Either[String,Int]]) =f.recover({ case e: Exception => Left(s"failed becau
..
假设我有以下设置: def foo:Either[Error, A] = ???定义栏:EitherT[Future, Error, B] = ???案例类 Baz(a: A, b: B) 如何使用理解来实例化 Baz 类?我试过: val res = for {一个
..