问题标签 [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 - 表达式中的下划线
下面的下划线是什么意思。这是 scalaz7 库的片段:
使用它的一般规则是什么?
scala - scalaz.Validation loopSuccess 和 loopFailure 是如何工作的
有人可以用现实世界的例子来解释下面的方法是如何工作的scalaz.Validation
吗?我的意思是loopSuccess
和loopFailure
。
源代码(scalaz7)的片段:
scalaz.验证:
伴侣对象:
scala - Scalaz - 结合 List 和 State Monad 进行理解
我计划开始在我的 Scala 代码中使用 Monadic 样式来处理线程状态等。这是一个结合 3 个单子函数的简化示例(并且只关心副作用)
这一切都是不言自明的,并且按预期工作。但是为了让这种方法对我真正有用,我希望能够将它与List
理解结合起来。这是一些(不起作用的)代码来说明我的意思:
基本上,我希望能够根据来自 a 的参数组合 monads List
- 在 的每个元素上运行 monadic 函数,list
并在我进行时累积副作用。我理解示例语法不起作用,我明白为什么它不起作用 - 我只是在寻找一个干净、优雅的等价物。
我很确定可以使用 scalaz monad 转换器来实现这一点,更具体地说,StateT
但我不确定如何去做。
PS。我使用的是 Scalaz 7.0-M3,因此语法可能与最常见的 6.x 略有不同。
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 导入的文件中搜索了这个符号,但无济于事。
我在哪里可以找到@>的定义?
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
也有开箱即用的“单子”方法,比如map
,flatMap
等等......在没有Projection
.
因此,我想每个字段验证方法都返回 a Try[FieldType]
,更准确地说,如果出现任何故障, a Try[SpecificFieldExceptionType]
; 这个嵌套的包含一个String
message 字段和一个 rootCause 字段,可以在整个build
方法中累积。
使用 Scala 2.10,是否可以或应该Try
练习替换 scalaz 验证库以进行简单的验证,如构建器模式所涉及的?
**编辑* ***
通过阅读Try
源代码,听起来Try
无法累积多个异常,因此面向快速失败。EvenTry.flatMap
返回潜在的先前失败,因此没有累积的概念:
相反ValidationNEL
,处理累积功能。
有什么确认吗?
scala - 为什么 List 是 Semigroup 而 Seq 不是?
我对 scalaz 相当陌生,我试图弄清楚为什么以下代码有效:
但这并不...
我看到 Semigroup 的 Map 隐含,但我没有看到 List 或 Seq 的映射。
几个问题:
- ListSemigroup 的隐含在哪里?
- 为什么 Seq 没有一个?
scala - 点阅读器 monad scala
有没有办法,如何轻松地point
在Reader
上下文中赋值?
我可以使用Reader
对象并忽略上下文:
point
对此有专门的方法。我明白了,这是在Applicative
. 我想,有一些技巧,如何将值放入Reader
上下文中。
scala - scalaz效果中的简单控制流
拿这个简单的代码:
它绝对不是特别优雅,尤其是不幸的范围界定line
——然而,我认为它很容易阅读。
现在尝试将其直接转换为scalaz效果,我想出了:
这让我觉得我错过了一些东西,因为这根本不像是一种改进?我缺少一些更高阶的控制流吗?
scala - 如何在不溢出堆栈的情况下将 IO 与 Scalaz7 Iteratees 一起使用?
考虑这段代码(取自此处并修改为使用字节而不是字符行)。
在一个大小合适的文件 (8kb) 上运行此代码会产生 StackOverflowException。一些搜索发现可以通过使用 Trampoline monad 而不是 IO 来避免异常,但这似乎不是一个很好的解决方案 - 牺牲功能纯度来让程序完全完成。解决这个问题的明显方法是使用 IO 或 Trampoline 作为 Monad Transformer 来包装另一个,但我找不到它们中任何一个的 Transformer 版本的实现,而且我还不足以成为一个函数式编程大师知道如何编写我自己的(了解更多关于 FP 是这个项目的目的之一,但我怀疑创建新的 monad 转换器目前有点超出我的水平)。我想我可以围绕创建、运行和返回我的迭代的结果来包装一个大的 IO 操作,
大概有些 monad 不能转换为 monad 转换器,所以我想知道是否可以在不丢弃 IO 或溢出堆栈的情况下处理大文件,如果可以,如何?
额外的问题:我想不出任何方法让迭代者在处理时发出信号,表示它在处理时遇到了错误,除了让它返回 Either,这使得组合它们变得不那么容易。上面的代码展示了如何使用 EitherT 来处理枚举器中的错误,但是这对迭代器是如何工作的呢?
scala - scalaz 蹦床和 IO
这个问题与另一个问题有关,但简化为一个更简单的情况:
我假设以下进口:
我有以下生成器:
以及以下非尾递归定义:
结果是:
如何设法使 IO map/flatMap 也被蹦床?看来我在第二个内部创建了其他嵌套堆栈以供理解。我是否需要编写一个TrampolineT
将使用unsafePerformIO
提取的 io 值并将其重新包装为挂起的代码?