问题标签 [scalaz]
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.
validation - Scalaz 验证和 ApplicativeBuilder 限制
我们在项目中使用 scalaz 验证特征来验证 HTTP 参数。常见的情况是仅在所有验证值都有效时才采用少量验证值并执行必要的操作,否则返回错误列表:
这很好用,直到我们必须使用超过 8 个参数,因为 |@| 运算符构造 ApplicativeBuilder,它限制为 8 个参数。是否有另一种方法来执行这种一次性验证,最好是保持代码可读?
scala - 尾递归和 scalaz 承诺
我目前正在玩 Scalaz 非阻塞期货。承诺。我正在努力使以下函数尾递归:
wherep
是一个带有 type 的谓词,是一个带有 typeI=>Boolean
的f
并发函数I=>Promise[I]
。
该方法在没有注释的情况下编译。
有什么提示吗?谢谢
python - 将基于 python-twisted 的代码移植到 scala:需要框架建议
我正在尝试将大量用 python 编写的代码移植到 scala 中,并且我正在寻找关于选择哪种框架组合的意见。
这个东西本质上是一个 RPC(基于自定义 protobuf + xmlrpc)/HTTP 服务器和客户端,它执行一些数据库维护和转换,但后来将 rpcs 发送到此重写范围之外的工作人员。
作为实现 RPC 堆栈的网络 IO/基础,我使用的是 netty。旧事物中的所有工作流程都基于扭曲的 Deferred,为了替换它,我目前正在考虑直接使用 ChannelFuture,或者将其包装在 scalaz.Promise 或 akka.Future 中。
我想,问题的一部分是 - 它可以比手动处理回调更简单吗?我想,如果我选择这条路线,我可以稍后通过添加一些包装器和使用延续来简化它,但也许我需要从一开始就使用不同的东西?
我试图将工作流程融入演员模型中,但它似乎不适用于 stdlib 演员。
谢谢。
更新: Finagle 似乎非常接近于扭曲的模型,或者至少意外地相似。twitter.util.Future 看起来很像 twisted 的 Deferred。所以我暂时使用它。
更新 2:我首先移植它的原因是静态类型和性能。
scala - Scala子类型+隐式转换问题
我正在尝试使用 scalaz 库对 scala 中的 monads 做一些事情,并且在使其与子类型很好地配合使用时遇到了一些麻烦。
我已经开始定义我自己的 monad。为了简单起见,让它成为一个身份单子:
接下来,我用一些额外的功能对其进行了扩展:
有了这个附加功能,ExtendedId
不再是 monad。
现在我想将类型的对象ExtendedId[A]
用作Id[A]
:
请注意,我知道由于ExtendedId
不是 monad,所以我能得到的最好的输出是Id[Int]
,我可以接受!但不幸的是,该代码仍然无法编译。
但是,这个确实:
在这里,asId
函数只是将其参数向上转换为 from ExtendedId[A]
to Id[A]
。似乎它应该是完全多余的,但事实并非如此。
为什么会这样?确实存在从Id[A]
到包含的对象的隐式转换,map
并且显然确实存在从ExtendedId[A]
到的微不足道的隐式转换Id[A]
。那么,为什么编译器无法组合它们呢?
scala - 如何将两个 Function0 val 组合成一个 Function0
我想象这样的事情:
虽然M
会Function0
。这在scalaz中可能吗?
validation - scalaz 验证和列表单子
我正在尝试提出类似于以下内容的内容:
上面的代码无法编译,我理解,在语法上它没有意义。
我正在尝试以单子方式执行验证列表。我该如何做到这一点?
scala - 使用 scalaz 进行开发是否需要类似 Unicode/APL 的键盘?
scalaz是否可以在没有包含适当 Unicode 字符的键盘的情况下使用,或者每个 Unicode 标识符是否也有一个“ASCII”等价物(如果是,是否可以保证它保持这种状态)?scalaz 是否有特殊的键盘布局?
最佳做法是什么?直接输入 Unicode 标识符还是使用 ASCII 替代品并在提交前使用脚本将它们替换为 Unicode 标识符?
performance - 以更实用的方式(scalaz)使用 Scala 会导致性能/可维护性损失吗?
我目前正在研究一个小项目(< 10k loc),该项目主要是纯粹的,但依赖于可变优化,主要基于迭代器和一些数据结构重用以进行重型计算。
我想学习更多的函数式编程并希望获得更多的类型安全性,例如通过将可变计算包装到状态转换器单子等中。为此,存在 scalaz 库。
问题一
当通过使用所有花哨的函数来更大规模地抽象我的计算时,我会引入我不会摆脱的性能杀手吗?就像我的计算在 Monads 中被包裹得很深?
问题二
考虑到 Scala 的有限类型推断,这是否可行?我目前正在与非常大的类型签名作斗争(可能是因为我不知道如何正确摆脱它们)。我想更多的“功能”会引入更多这样的样板代码。
免责声明
我不是在质疑函数式方法是好是坏。向 Haskell 提出这个问题是没有意义的。我质疑这样做对 Scala 是否明智。
根据要求编辑:我的项目中的大型签名示例
(但这将是一个不同的问题)
以下代码描述了对类型参数化输入对象 ( DiscreteFactorGraph[VariableType, FactorType[VariableType]]
) 的迭代计算。您可以构造一个计算对象createInitialState
并对其执行计算,advanceState
最后从中提取一些信息marginals
。
我希望在计算过程中保留因子图对象的类型(及其参数类型),以便最终应用marginals
产生正确类型的DiscreteMarginals[VariableType]
. 我认为目前我只需要在计算类型(即TState
)中保留变量类型,因此不使用携带因子类型。但在不同的地方,我什DiscreteFactorGraph
至需要变量的类型,所以我倾向于在未来需要更多的类型信息通过计算。
我一直在摆弄这部分,我希望有更好的解决方案。目前我有一个非常实用的方法,其中只有这三个功能。但我必须通过它们链接类型。或者,我可以将其定义为一个类并使用所有这些类型为该类参数化,因此我不必为每个方法重复类型参数。
scala - Scalaz `F[_] : Applicative` 类型约束如何暗示使用隐式参数?
我正在努力理解Traverse
Scalaz 中 trait 中的以下函数定义:
def traverse[F[_] : Applicative, A, B](f: A => F[B], t: T[A]): F[T[B]]
我不明白的部分是F[_] : Applicative
。
现在,让我们看看是什么Applicative
:
在这里,要traverse
为某种类型工作F
,需要Applicative[F]
在范围内引入一个类型的隐式对象。
我想了解几件事:
- 笏到底
F[_] : Applicative
是什么意思? - 为什么
F[_]
有关系Applicative
?我们需要Applicative[F]
,而不是 F[something] extends Applicative 对吗? - 为什么此方法使用类型的隐式值
Applicative[F]
而不声明隐式参数?
scala - 如何将 Seq[Either[A,B]] 减少为 Either[A,Seq[B]]?
Seq[Either[String,A]]
给定一个带有Left
错误消息的序列。如果序列Either[String,Seq[A]]
的所有元素都是. 如果至少有一个(错误消息),我想获得第一条错误消息或所有错误消息的串联。Right
Seq[A]
Right
Left
当然,您可以发布猫或 scalaz 代码,但我也对不使用它的代码感兴趣。
编辑
我已经更改了标题,它最初要求一个Either[Seq[A],Seq[B]]
来反映消息的正文。