问题标签 [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 - Scala中的iso宏
如果我想隐式地将两个对象从一个对象转换为另一个对象,是否可以使用 Iso 宏之类的东西来做到这一点?
例如,如果我有这个:
我想简单地写:
注意:如下所述,我计划在我的 Web 框架中使用它,将我的数据库模型转换为中间件/前端模型。
scala - |+| 是一个半群,为什么它需要一个幺半群隐式解析
Semigroup 的目标是确保关联性和闭合性 monoid 的目标是基于 Semigroup 并提供额外的 Identity。当我使用 |+| semigroup appender,为什么我定义隐式幺半群而不是隐式半群
这是我正在使用 reduceLeft 的代码,它不需要初始值
如果 staffListSemigroup 为 Semigroup[List[Staff]],则编译错误为 value |+| 不是 List[SemigroupSpec.this.Staff] 的成员
另外,|+| 的定义 在半群内
提前谢谢了
编辑
其次是@Travis 的回答,我认为这是不正确的。对于隐式值,特定值将始终覆盖通用值。这是我刚刚写的一个代码示例:
那是因为在 Scalaz 中,没有指定像 Foo 这样的方法中指定的类型。
scalaz - What happened to the Scalaz http module?
I am currenlty reading the book Scala in Action and while reading I'm trying to do the programming exercises. However, I'm stuck now on chapter 6.3 where I have to use Scalaz.
The thing is, the http module of Scalaz 6.0.3 is used. In this chapter I should only be able to do a GET request and later the idea is to build upon the project and make it a little more complex.
The problem I'm facing is that, I'm using Scala 2.11.2, so when I try to use Scalaz 6.0.3, the dependency can not be found. I guess that is because 6.0.3 doesn't support Scala 2.11.2. So, I wish to use Scaalaz 7.0.1. However, the HTTP module doesn't exist in 7.0.1, so I can't even compile my project because I have statements like: import scalaz.http._.
Furthermore, in the code, some values like Request object, and Response object are not found because in the example code, as far as I see, they are imported from scalaz.http._.
So, basically, what I'm asking is, can anyone direct me to some kind of tutorial? Or at least direct me to a changelog where I can see where the objects are now located?
Thank you!
scala - 使用Scalaz Futures和定时功能时如何正确退出程序
这按预期工作:
这不会:
在第一种情况下,应用程序正常退出,而在第二种情况下则不会。但是,两个版本都正确打印出结果值。
这是一个错误还是我不理解的东西?
scala - Scalaz 未装箱的标记类型不会自动取消装箱
阅读http://eed3si9n.com/learning-scalaz/Tagged+type.html并尝试示例代码:
根据指南,应该 yield40.0
但是,在 Scala 2.11.2 上我得到:
然而
工作得很好。
这是 2.10 vs 2.11 的事情还是我错过了什么?如果我不能像这样(不再)使用它们并且不得不求助于显式强制转换,那么取消装箱的标记类型有什么意义呢?
scala - 为什么 getOrElse 会在 scalaz 中丢失类型推断
当我在 Scalaz 中使用 Either 类型时,这是一个非常好的设计,但方法 getOrElse 会丢失类型推断。
为什么 val 要么 = 3.right[String] | “123”不是指 Int,而是 Any 发生。
这是一个缺陷还是设计的一部分?
提前谢谢了
scala - 在 scalaz.Validation 的 HList 上映射和减少/折叠
我从这样的事情开始:
现在我认为最好减少样板文件以获得更好的可读性,并且不必向更多初级团队成员解释什么.toValidateNel
和|@|
含义。第一个想法是,List
但最后一行将停止工作,我不得不放弃一些静态安全。于是我看向Shapeless:
但是,我什至似乎无法克服这.map(...)
一点。我已经按照#scalaz的建议进行了尝试:
……无济于事。
我已经在#scalaz 上寻求帮助,但人们似乎没有开箱即用的答案。但是,我真的很想学习如何解决这个问题,既实用又学习。
PS 实际上,我的验证被包装在里面Kleisli[Va, A, B]
,这样我就可以使用它来组成单独的验证步骤,>=>
但这似乎与问题正交,因为到那时.map(...)
,所有Kleisli
s 都将被“减少”到Validation[String, A]
.
scala - 包含一些 F[_] 的元组/hlist 上的通用变换/折叠/映射
我最近询问了 map 和 reduce/fold over scalaz.Validation 的 HList并得到了一个很好的答案,关于如何将固定大小的元组Va[T]
(它是 的别名scalaz.Validation[String, T]
)转换为scalaz.ValidationNel[String, T]
. 从那时起,我一直在研究 Shapeless 和类型级编程,以尝试提出一种适用于任何大小的元组的解决方案。
这就是我要开始的:
那么validate
我这样称呼的助手是:
我开始使用 anyProduct
而不是一对并将其内容限制为Va[T]
:
我确实有这样的感觉,简单地添加约束只能确保输入有效,但对实现函数体没有任何帮助,但我不知道如何去纠正它。
traverse
然后开始抱怨缺少证据,所以我最终得到:
然而,编译器继续抱怨缺少Traverser[HList, toValidationNel.type]
隐式参数,即使它在那里。
traverse
为了编译调用,我需要向编译器提供哪些额外的证据?它是否与UnaryTCConstraint
未以对调用有用的方式声明有关traverse
,即它不能适用toValidationNel
,params
因为它不能证明params
包含 only Va[_]
?
PS我还找到了泛型类型的leftReduce Shapeless HList,并尝试使用foldRight
而不是traverse
无济于事;在尝试诊断编译器真正缺乏哪些证据时,错误消息并没有太大帮助。
更新:
根据 lmm 所指出的,我已经删除了演员表HList
,但是,现在的问题是,虽然在非通用解决方案中我可以调用调用.map(_.tupled).map(block.toProduct)
的结果,traverse
但我现在得到:
值图不是 shapeless.contrib.scalaz.Out 的成员
为什么它可能是traverse(params.productElements)(toValidationNel)
调用结果而不是通用遍历?
更新 2:
更改该Traverser[...]
位以Traverser.Aux[..., Va[L]]
帮助编译器确定遍历的预期结果类型,但这只会使validateGen
函数编译成功,但会在调用站点产生另一个错误:
我也觉得这UnaryTCConstraint
是完全没有必要的——但我对 Shapeless 还是太陌生了,不知道是不是这样。
更新 3:
意识到从遍历器中出来的类型不可能是Va[L]
因为L
它本身已经是 的 hlist Va[_]
,所以我将L
类型参数拆分为In
and Out
:
这编译得很好——我很想知道以前的版本是如何Va[L]
作为返回值(即第三个参数Traverser.Aux
)编译的——但是,在调用站点,我现在得到:
未指定值参数 tr, fn