斯卡拉猫,穿越Seq

Vit*_*uel 7 scala traversal scala-cats

我知道我可以遍历List小号

import cats.instances.list._
import cats.syntax.traverse._

def doMagic(item: A): M[B] = ???
val list: List[A] = ???
val result: M[List[B]] = list.traverse(doMagic)
Run Code Online (Sandbox Code Playgroud)

我可以Seq来回转换List

val seq: Seq[A] = ???
val result: M[Seq[B]] = seq.toList.traverse(doMagic).map(_.toSeq)
Run Code Online (Sandbox Code Playgroud)

但是我可以在Seq没有样板的情况下进行遍历吗?

val seq: Seq[A] = ???
val result: M[Seq[B]] = seq.traverse(doMagic)
Run Code Online (Sandbox Code Playgroud)

或者,获取Traverse [Seq]实例的简单方法是什么?

LMe*_*yer 6

Cats 不为 提供类型类实例Seq,因此除了自己实现之外,您还需要进行转换。

至于为什么,在(有点旧的)猫问题中有一个正在进行的讨论。总而言之,您对Seq基本特征的了解不足以确保某些类型类实例法则成立。

编辑:没关系,它现在存在,请参阅链接线程