问题标签 [scalaz7]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - 当使用 EitherT[StateWithSomeFixedStateType, T, U] 时,当返回 left 时如何进行一些状态操作?
假设您有一个看起来像这样的 EitherT:
如果您有一个可以返回左的理解:
你如何跟进一个在自身返回左侧之前操纵状态的理解?
我想我想要一些非常接近 orElse 的东西,但是 orElse 无法访问左侧的值:
如果它需要像 (x: => Int => EitherT[F, AA, BB]) 而不是仅仅 (x: => EitherT[F, AA, BB]),它会起作用。
我曾尝试从:
但是如果我从调用 isLeft 开始,看起来计算至少运行了两次,一次是为 isLeft,一次是在我调用 leftMap 之类的东西时。
在这里使用什么是正确的?
validation - Scalaz Validation with applicative functor |@| 不工作
我正在尝试在我的应用程序中使用 Scalaz 7 验证。但是,我在让|@|
应用函子合并我的失败时遇到问题。这是我的代码:
minValidate
andsizeValidate
函数只是ValidationResults
返回。
问题是,这段代码无法编译。错误信息是:
我不知道这意味着什么……我需要给 Scala 更多类型信息吗?
我想要完成的是,如果所有字段都是successNel
s,则返回它,否则,返回所有failureNel
s 的组合。
自从|@|
以前版本的 Scalaz 以来发生了变化?因为即使我做了类似的事情:
我犯了同样的错误。
更新
我开始探索 Scalaz 源代码,发现+++
似乎可以满足我的要求。
+++
和有什么区别|@|
?
scala - 结合EitherT和Future
我有一个应用程序可以对不同的后端系统进行大量调用,并希望使用 for-comprehensions 来简化跨后端系统的流程。
我希望将 EitherT (scalaz) 和 Future (scala 2.10) 结合起来,这样我就可以捕获第一个潜在错误(它是未来或后端系统问题)并向最终用户返回适当的消息。我已经快速浏览了一个 scalaz Validation,但是对于捕获第一个错误而不是所有错误的建议是使用 EitherT。
我首先在 REPL 中尝试一个简单的示例,但是我收到以下错误
错误:找不到参数 F 的隐式值:scalaz.Functor [scala.concurrent.Future]
我对 scala 和 scalaz 还是新手,所以任何指针都会很棒。
** 更新 **
通过包含基于@stew 建议的 scalaz-contrib,我现在有了一个更新版本,它显示了结合 EitherT 和 Future 的理解,显示了不同的简单用例后端成功、后端失败和未来失败
scala - Scalaz:如何用价值镜头组成地图镜头?
这里有一个 Scalaz 地图镜头的例子:Dan Burton 称之为containsKey
,它的灵感来自 Edward Kmett 的演讲。Scalaz 7 中也有一些mapVPLens
对修改映射中的值很有用的东西。
我的问题是:如果我有一个用于修改 typeV
的镜头和一个用于 a 的镜头,我该Map[K,V]
如何构图?我一直在寻找一个很好的简单示例,但 Scalaz 中仍然缺乏示例。
我对 Scalaz 6 和 Scalaz 7 解决方案都感兴趣。
scala - 如何帮助 Scalaz 进行类型推断和 2 个类型参数
我有一个叫做 a 的东西Generator
:
我可以Bind
为这个生成器提供一个实例:
不幸的是,如果我尝试将生成器用作应用实例,则类型推断将完全丢失:
我现在唯一的解决方法是向Generator
对象添加一个专门的方法:
然后编译:
有解决此问题的方法吗?我想这是因为使用State[S, A]
as a会Monad
带来同样的问题(但在 Scalaz 中似乎对 有特殊处理State
)。
scala - scalaz.syntax.monad._ 破坏了应用语法
我有一些使用应用程序和单子语法的代码。代码如下所示:
该代码编译没有问题,就在我想用方法导入替换flatMap
方法时出现以下错误:>>=
scalaz.syntax.monad._
我想我在导入时做错了,但我不明白为什么导入 monad 语法会破坏|@|
运算符以及如何让两种语法一起工作,有什么解决方案吗?
我正在使用 scalaz 7.1.0-M2。
scala - 为什么这个 Scalaz 7 枚举器会泄漏内存?
以下定义导致内存泄漏:
通过以下测试可以观察到泄漏:
但是,一个小的更改(即移动xs.next
调用)会阻止泄漏:
为什么?
我有一个模糊的概念,即解释与闭包的参考模式有关,但我无法提出这种行为的具体原因。我正在尝试追踪不同的内存泄漏,并且我怀疑(希望?)了解此泄漏可能有助于确定导致该泄漏的原因。
scala - 使用 Scales Xml (Scala) 解析大 XML,函数式方式 - StackOverFlowError using Zippers
长期潜伏者,第一次海报。如果我的问题不清楚,请告诉我。
我有一个需要解析的奇怪 XML 文件(将数据放入类中并在内部处理)。我提到这很奇怪,因为任何人通常认为应该嵌套的东西,它不是。让我给你举个例子:
该文件继续包含数万个项目。有些项目根本不包含数据,而有些数据标签里面什么都没有。
我被赋予了如何解析它的完全自由,并且由于我试图掌握 Scala,我选择它来解决这个任务。和过去一样,我使用 StAX (Apache AXIOM) 进行拉解析,我在 Scala 中寻找类似的东西,然后我找到了 Scales。到目前为止,一切都很好。
使用:
- 斯卡拉 2.10.2
- 秤 0.4.5
我需要的不仅是每个标签的内容和属性,还需要每个标签的原始内容。例如,在上面的 XML 中,“top”标签的内容类似于以下内容:
其中 rawContent 将是:
这同样适用于“数据”标签,但由于数据不是嵌套的,并且鉴于拉解析为您提供了一个 XmlPull,它只是一个 Iterator[PullType],因此我提出了解析标签、遍历节点的想法直到我找到结束标签,或者在“数据”标签的情况下,直到我找到另一个“数据”开始标签或“项目”结束标签。但是,无论我怎么想这个问题,我都无法避免保存状态。
我决定尝试使用拉链。
首先,由于我需要遍历直到找到给定的标记并同时对找到的每个元素执行某些操作,因此我正在尝试使用 findBy。下面是我现在正在尝试的代码。我尝试检索给定标签的属性以及其中所有内容的原始内容。
该代码适用于“top”标签,但如果我尝试使用“item”标签,我会得到 StackOverFlowError:
做了一些研究,不确定它是否相关,我发现 Scales 使用 Scalaz 6.0.4,并且在那里,Zipper.findBy 不是tailrec,而它(至少是它使用的内部函数)在Scala 7。但是,如果我将依赖项更改为 7.0.4,由于 Iteratee 从 Scalaz 6 到 7 的更改(一些参考不在同一个地方),我会从 Scales 得到很多错误。
我的问题:
- 我是否过度杀伤了所有过程?我应该采取另一种更简单的方法来解决这项任务吗?
- 如果我要继续按照描述的方式这样做,我应该考虑什么?有没有办法在 Scalaz 7 中使用 Scales?
评论:
- 强大的命令式编程背景,特别是Java。
- 我以前使用过 Scala,但很多时候我不得不回到一种命令式的做事方式,因为我被卡住了(就像这次一样)而且很耗时。
- 我以前没有与 Scalaz 合作过。我的函数式编程知识很基础,但我很乐意学习新东西,而且我喜欢函数式编程。
scala - 将双射提升为函子
也许我遗漏了一些明显的东西,但是我正在尝试清理使用 Scalaz 7 的项目中的一些样板,并且我没有找到一个看起来非常简单且可能有用的特定拼图。
假设我们有两种类型之间的双射:
现在假设我们发现我们需要 和 之间的双List[Foo]
射List[Bar]
。我们可以很容易地编写一个提供此功能的隐式类(实际上我们也可以让它适用于任何函子):
请注意,这是bimap
从 Haskell 的Data.Bijection
. Scalaz 的双射也有一个名为 的方法bimap
,但它有一个更繁忙的类型,并且似乎没有以任何明显的方式做我想做的事。
现在我们可以只写以下内容:
我们已经得到了我们需要的双射。
我是否遗漏了一些抽象,使我可以使用 Scalaz 7 中已经为双射提供的函数和实例更清晰地编写它?
scala - 对理解 Scalaz Future 和 Task 的一点帮助
我试图了解 scalaz 并发包背后的想法和目的,主要是 Future 和 Task 类,但是在某些应用程序中使用它们时,它现在远非简单的顺序模拟,而scala.concurrent.Future
, 工作得更好。任何人都可以分享他用scalaz编写并发/异步应用程序的经验,基本上如何async
正确使用它的方法?正如我从消息来源了解到的那样,async
它不使用单独的线程,例如对 standard 的调用future
,或者fork/apply
来自 scalaz 的方法,那么为什么要调用它async
呢?这是否意味着为了与 scalaz 获得真正的并发性,我总是必须调用fork(now(...))
or apply
?