- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对traverse、traverseU和traverseM的使用案例感到困惑,我在scalaz网站上搜索了它,简单的代码示例:
def sum(x: Int) = x + 1
List(1,2,3).traverseU(sum)
它看起来类似于( map 和聚合):
List(1,2,3).map(sum).reduceLeft(_ + _)
我认为这比 traverseU 的要多,我只是想知道这 3 种方法有什么区别,最好有一些示例代码来展示区别
提前非常感谢
最佳答案
sequence
用于将应用效果聚集在一起。更具体地说,它可以让您将 F[G[A]]
“翻转”为 G[F[A]]
,前提是 G
为 Applicative
和 F
是Traversable
。因此,我们可以使用它来“汇集”一堆 Applicative
效果(注意所有 Monad
都是 Applicative
):
List(Future.successful(1), Future.successful(2)).sequence : Future[List[Int]]
// = Future.successful(List(1, 2))
List(4.set("abc"), 5.set("def")).sequence : Writer[String, List[Int]]
// = List(4, 5).set("abcdef")
traverse
相当于 map
然后 sequence
,因此当您有一个返回 Applicative< 的函数时可以使用它
并且您只想获取 Applicative
的单个实例,而不是它们的列表:
def fetchPost(postId: Int): Future[String]
//Fetch each post, but we only want an overall `Future`, not a `List[Future]`
List(1, 2).traverse[Future, String](fetchPost): Future[List[String]]
traverseU
与 traverse
操作相同,只是类型表示方式不同,以便编译器更容易推断它们。
def logConversion(s: String): Writer[Vector[String], Int] =
s.toInt.set(Vector(s"Converted $s"))
List("4", "5").traverseU(logConversion): Writer[Vector[String], List[Int]]
// = List("4", "5").map(logConversion).sequence
// = List(4.set("Converted 4"), 5.set("Converted 5")).sequence
// = List(4, 5).set(Vector("Converted 4", "Converted 5"))
traverseM(f)
相当于 traverse(f).map(_.join)
,其中 join
是 scalaz 名称压平
。它作为一种“提升平面 map ”很有用:
def multiples(i: Int): Future[List[Int]] =
Future.successful(List(i, i * 2, i * 3))
List(1, 10).map(multiples): List[Future[List[Int]]] //hard to work with
List(1, 10).traverseM(multiples): Future[List[Int]]
// = List(1, 10).traverse(multiples).map(_.flatten)
// = List(1, 10).map(multiples).sequence.map(_.flatten)
// = List(Future.successful(List(1, 2, 3)), Future.successful(List(10, 20, 30)))
// .sequence.map(_.flatten)
// = Future.successful(List(List(1, 2, 3), List(10, 20, 30))).map(_.flatten)
// = Future.successful(List(1, 2, 3, 10, 20, 30))
关于scala - 如何理解traverse、traverseU和traverseM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26602611/
我想知道是否可以构造以下函数 ix :: (Applicative a, Traversable t) => Int -> (v -> a v) -> (t v -> a (t v)) 对除第i个元素
精简版。 Scala 中的大多数泛型集合都有一个 map实际上,该方法将返回相同类型的集合。 (例如, List[A].map(f:A=>B) 返回一个 List[B] 。)Scala 集合库是明确设
早上好/下午好/晚上好。 因此,我们的数据结构类(class)给了我们一个作业,使用以下算法在 java 中分割灰度图像: Input: A gray-scale image with P pixel
我一直在想为什么 Traversable 类型类需要 Functor 和 Foldable,而不仅仅是 Foldable ,因为它不使用仿函数的任何部分? class (Functor t, Fold
JavaScript 和 CSS 在遍历 HTML 元素时都使用自己的 DOM 树。 在JavaScript中,我们可以使用它自己的DOM遍历方法如 element.parentNode elemen
如何在nodejs遍历模块中中断/停止遍历? 我正在遍历 json,在某些情况下,我想停止遍历。 遍历(req.body).forEach(函数(xnode){ log.info("检查 Node :
自然法规定: t . traverse f == traverse (t . f) -- for every applicative transformer t 现在对于法律的 RHS,如果 f 的类
我想在 Java8 节点流中转换树。 这是一个存储数据的节点树,可以选择: public class SelectTree { private D data; private boolean
有人可以向我解释一下,typeclass Traversable 的目的是什么? ? 类型类定义是: class (Functor t, Foldable t) => Traversable (t :
我正在研究Scala 2.8集合类的源代码。我对 scala.collection.Traversable 的层次结构有疑问。查看以下声明: package scala.collection
在我的 ArangoDB 图中,我有一个主题、与该主题关联的消息线程以及这些消息线程内的消息。我想以返回与消息线程关联的数据以及消息线程内的消息计数的方式遍历该图。 数据的结构相当简单:我有主题节点、
问题 1 - 在Scala文档中,我发现Traversable是一个带有抽象方法foreach的trait: http://www.scala-lang.org/docu/files/collecti
在 https://babeljs.io/当我想编译我的 ES6 代码时,将显示此错误: traverse.clearCache is not a function 我的代码是一个简单的代码,例如:
我有以下实现目录遍历的模块: module Walk ( walk ) where import Control.Monad import Contro
我试图弄清楚如何编写一个适用于任何 Traversable[_] 的函数式交换函数,给定一个集合和要交换的索引。我想出了以下内容: def swap[A, CC List(5,2,3,4,1) 我想
假设我们有一些类 Foo这样 Foo f 的实例为我们提供实现 Functor f 所需的一切, Foldable f和 Traversable f .为避免重复实例,可以见证 Foo 之间的这种关系
我记得在某处读到这样的类型不能是 Traversable : data Bar a = Bar a deriving(Show) instance Functor Bar where fmap f
我有一个玫瑰树结构,我想写一个 Traversable 例如。所以我从以下几点开始: data Tree a = Tree a [Tree a] deriving (Show) instance Fu
我正在努力解决如何使用 jQuery 选择特定元素。此处概述的条件: 在我的函数中的相关点,this 引用了一个span。 该 span 可能是子级、孙级或曾孙级,但在层次结构中的某个位置,它由 td
lens报价 holesOf ,这是这个假设函数的一个更通用和更强大的版本: holesList :: Traversable t => t a -> [(a, a -> t a)
我是一名优秀的程序员,十分优秀!