问题标签 [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.

0 投票
1 回答
124 浏览

scala - 表达式中的下划线

下面的下划线是什么意思。这是 scalaz7 库的片段:

使用它的一般规则是什么?

0 投票
1 回答
542 浏览

scala - scalaz.Validation loopSuccess 和 loopFailure 是如何工作的

有人可以用现实世界的例子来解释下面的方法是如何工作的scalaz.Validation吗?我的意思是loopSuccessloopFailure

源代码(scalaz7)的片段:

scalaz.验证:

伴侣对象:

0 投票
1 回答
1040 浏览

scala - Scalaz - 结合 List 和 State Monad 进行理解

我计划开始在我的 Scala 代码中使用 Monadic 样式来处理线程状态等。这是一个结合 3 个单子函数的简化示例(并且只关心副作用)

这一切都是不言自明的,并且按预期工作。但是为了让这种方法对我真正有用,我希望能够将它与List理解结合起来。这是一些(不起作用的)代码来说明我的意思:

基本上,我希望能够根据来自 a 的参数组合 monads List- 在 的每个元素上运行 monadic 函数,list并在我进行时累积副作用。我理解示例语法不起作用,我明白为什么它不起作用 - 我只是在寻找一个干净、优雅的等价物。

我很确定可以使用 scalaz monad 转换器来实现这一点,更具体地说,StateT但我不确定如何去做。

PS。我使用的是 Scalaz 7.0-M3,因此语法可能与最常见的 6.x 略有不同。

0 投票
1 回答
135 浏览

scala - scalaz源代码中的@>类型在哪里?

我一直在阅读 scalaz 镜头的源代码,您可以在https://github.com/scalaz/scalaz/blob/scalaz-seven/core/src/main/scala/scalaz/Lens.scala找到

第 303 行开始,有些函数返回@>[A,B]类型的值。这种类型是Lens的别名吗?从上下文和符号的形状来看,这对我来说是有意义的,这可能代表一束光线进入圆形透镜。

但是为什么其他函数返回Lens[A,B]而不是时髦的别名呢?我在文件和 Lens.scala 导入的文件中搜索了这个符号,但无济于事。

我在哪里可以找到@>的定义?

0 投票
1 回答
1202 浏览

scala - 处理对象字段验证的最佳方法 => 要么 / Try (scala 2.10) / ValidationNEL (scalaz)

让我们假设一个使用构建器模式构造的对象。

此构建器模式将包含一个build专注于字段验证然后转换为目标类型的方法。

可以使用以下方式实现此验证:

  • Either[FailureObject, TargetObject]类型
  • Try[TargetObject](Scala 2.10 的新功能)
  • Validation[FailureObject, TargetObject]ValidationNEL[FailureObject, TargetObject]来自 scalaz 库

Validation我读到过Either类型的主要优点之一是Validation可以“开箱即用”累积故障。

但是“新”Try方式呢?我注意到它Try也有开箱即用的“单子”方法,比如mapflatMap等等......在没有Projection.

因此,我想每个字段验证方法都返回 a Try[FieldType],更准确地说,如果出现任何故障, a Try[SpecificFieldExceptionType]; 这个嵌套的包含一个Stringmessage 字段和一个 rootCause 字段,可以在整个build方法中累积。

使用 Scala 2.10,是否可以或应该Try练习替换 scalaz 验证库以进行简单的验证,如构建器模式所涉及的?

**编辑* ***

通过阅读Try源代码,听起来Try无法累积多个异常,因此面向快速失败。EvenTry.flatMap返回潜在的先前失败,因此没有累积的概念:

相反ValidationNEL,处理累积功能。

有什么确认吗?

0 投票
1 回答
1796 浏览

scala - 为什么 List 是 Semigroup 而 Seq 不是?

我对 scalaz 相当陌生,我试图弄清楚为什么以下代码有效:

但这并不...

我看到 Semigroup 的 Map 隐含,但我没有看到 List 或 Seq 的映射。

几个问题:

  1. ListSemigroup 的隐含在哪里?
  2. 为什么 Seq 没有​​一个?
0 投票
1 回答
254 浏览

scala - 点阅读器 monad scala

有没有办法,如何轻松地pointReader上下文中赋值?
我可以使用Reader对象并忽略上下文:

Scalaz 似乎point对此有专门的方法。我明白了,这是在Applicative. 我想,有一些技巧,如何将值放入Reader上下文中。

0 投票
1 回答
300 浏览

scala - scalaz效果中的简单控制流

拿这个简单的代码:

它绝对不是特别优雅,尤其是不幸的范围界定line——然而,我认为它很容易阅读。

现在尝试将其直接转换为scalaz效果,我想出了:

这让我觉得我错过了一些东西,因为这根本不像是一种改进?我缺少一些更高阶的控制流吗?

0 投票
1 回答
593 浏览

scala - 如何在不溢出堆栈的情况下将 IO 与 Scalaz7 Iteratees 一起使用?

考虑这段代码(取自此处并修改为使用字节而不是字符行)。

在一个大小合适的文件 (8kb) 上运行此代码会产生 StackOverflowException。一些搜索发现可以通过使用 Trampoline monad 而不是 IO 来避免异常,但这似乎不是一个很好的解决方案 - 牺牲功能纯度来让程序完全完成。解决这个问题的明显方法是使用 IO 或 Trampoline 作为 Monad Transformer 来包装另一个,但我找不到它们中任何一个的 Transformer 版本的实现,而且我还不足以成为一个函数式编程大师知道如何编写我自己的(了解更多关于 FP 是这个项目的目的之一,但我怀疑创建新的 monad 转换器目前有点超出我的水平)。我想我可以围绕创建、运行和返回我的迭代的结果来包装一个大的 IO 操作,

大概有些 monad 不能转换为 monad 转换器,所以我想知道是否可以在不丢弃 IO 或溢出堆栈的情况下处理大文件,如果可以,如何?

额外的问题:我想不出任何方法让迭代者在处理时发出信号,表示它在处理时遇到了错误,除了让它返回 Either,这使得组合它们变得不那么容易。上面的代码展示了如何使用 EitherT 来处理枚举器中的错误,但是这对迭代器是如何工作的呢?

0 投票
1 回答
883 浏览

scala - scalaz 蹦床和 IO

这个问题与另一个问题有关,但简化为一个更简单的情况:

我假设以下进口:

我有以下生成器:

以及以下非尾递归定义:

结果是:

如何设法使 IO map/flatMap 也被蹦床?看来我在第二个内部创建了其他嵌套堆栈以供理解。我是否需要编写一个TrampolineT将使用unsafePerformIO提取的 io 值并将其重新包装为挂起的代码?