问题标签 [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.
scala - Scala 部分应用类型构造函数推断
我正在使用scala-2.8.1和scalaz-5.0。谁能准确解释为什么PartialApply1Of2
在一种情况下可以推断出 a 在另一种情况下不能推断?
即使(如前所述!)该方法<|*|>
具有MA
一个类型参数,而不是两个(如此Validation
),这仍然有效。我无法在我的 IDEA REPL 中使用 unicode,所以这里是:
我可以为呼叫提供特定类型,一切都很好。为什么scalac
不能推断这个?
在我的 REPL 中,这实际上会导致 scalac 错误,而不是合理的错误消息
scala - 使用 scalaz 的开源项目示例
任何人都可以指出任何使用scalaz的开源项目吗?
我什至对那些可能以一些小的方式使用 scalaz 的人感兴趣(与其他编程风格混合或只是从 scalaz 中提取一些东西)。
scala - 基本 Scalaz 状态问题
我如何使用State
来模仿 的行为List.zipWithIndex
?到目前为止我想出的(这不起作用)是:
这是非常松散地基于状态示例。正如我所说,它不起作用:
我可以通过更改 case 语句的一行来使其工作:
但这只是感觉不对。任何人都可以帮忙吗?
编辑-更多的玩耍让我明白了这一点
可以改进吗?它是否可以推广到除容器以外的容器List
(如果可以,需要哪些类型类?)
编辑 2 -我现在已经概括了它,虽然有点笨拙
或非常相似:
scala - Scalaz 验证
我正在尝试在我们的项目中使用 scalaz 验证并遇到以下情况:
现在我必须返回包含可能的参数错误的 ValidationNEL,如果有的话,或者使用经过验证的参数来调用该方法:
我知道,我可以使用 |@| 对于第一部分,但这段代码
将返回ValidationNEL[String, Validation[String, Int]]
。有没有办法“压平”这个结果,得到ValidationNEL[String, Int]
?
scala - 使用 scalaz' 切换函数和对象 |>
当我想切换函数和对象时,我可以使用scalaz
|>
运算符,这样可以获得更多的可读性。让我给你介绍一个模型函数:
String
在 trait中肯定存在从某个类混合的隐式转换SeqLike
。
scala - 好的scalaz介绍
最近scalaz引起了我的注意。它看起来很有趣,但是我没有找到任何关于该库的好的介绍。似乎scalaz融合了很多来自haskell和数学的想法。我发现的大多数文章都假设您已经对这些概念感到满意。
我正在寻找的是对库和基础概念的逐步介绍——从简单的基本概念到更高级的(基于基础的)。
我也查看了示例,但我很难找到应该开始学习库的点。
有人可以推荐我一些好的 scalaz 介绍或教程(涵盖基础和高级概念)吗?或者给我答案的起点。
更新
感谢大家的精彩回答!我总结了所有的答案,并在我的博客中添加了更多链接:
对于那些难以找到 Scalaz 的 API 文档的人来说,他们在这里:
http://docs.typelevel.org/api/scalaz/nightly/index.html#package
scala - Clojure 在 Scala 中的“让”等价物
我经常遇到以下情况:假设我有这三个功能
我也有calculate
功能。我的第一种方法可能如下所示:
它看起来很漂亮,没有任何花括号——只有一种表达方式。但这不是最优的,所以我最终得到了这段代码:
现在是用大括号括起来的几个表达式。在这样的时刻,我有点羡慕 Clojure。使用let 函数,我可以在一个表达式中定义此函数。
所以我的目标是calculate
用一个表达式定义函数。我想出了2个解决方案。
1 - 使用scalaz我可以这样定义它(有没有更好的方法来使用 scalaz?):
我不喜欢这个解决方案的是它是嵌套的。我拥有的 s越多val
,这个嵌套就越深。
2 - 通过for
理解,我可以实现类似的目标:
一方面,这个解决方案具有扁平结构,就像let
在 Clojure 中一样,但另一方面我需要将函数的结果包装起来并作为结果Option
接收(这很好,我正在处理空值,但我不...... .并且不想)。Option
calculate
有没有更好的方法来实现我的目标?处理这种情况的惯用方式是什么(也许我应该和val
s 呆在一起......但是let
这样做的方式看起来很优雅)?
另一方面,它与参照透明度有关。所有三个函数都是引用透明的(在我的示例中firstFn
计算一些常数,如 Pi),因此理论上它们可以用计算结果替换。我知道这一点,但编译器不知道,所以它无法优化我的第一次尝试。这是我的第二个问题:
我能否以某种方式(可能带有注释)向编译器提示我的函数是引用透明的,以便它可以为我优化这个函数(例如,在那里放置某种缓存)?
编辑
感谢大家的精彩回答!选择一个最佳答案是不可能的(可能是因为它们都很好)所以我会接受投票最多的答案,我认为这很公平。
scala - Scala:类型推断和子类型/更高种类的类型
我一直在和 Scalaz 一起玩,以便在 scala 中获得一点haskell 的感觉。为了理解 scala 中的工作原理,我开始自己实现各种代数结构,并遇到了 Scalaz 人提到的一种行为。
这是我实现仿函数的示例代码:
我为 Option 和一个虚假的 sumtype Foo 编写了一个仿函数实例。问题是 scala 无法在没有显式类型注释或包装方法的情况下推断隐式参数
Scala 在没有这些变通方法的情况下推断出 Functor[Bar] 和 Functor[Some] 之类的类型。
这是为什么?任何人都可以请我指出定义此行为的语言规范中的部分吗?
问候, raichoo
scala - 与 monad 不同的 monad-transformer 是什么?
这个问题说明了一切,真的。我知道(Scala)Monad看起来像这样:
Monad Transformer是什么样的?它们是用来做什么的?
编辑。考虑以下 REPL 会话:如果 monad 转换器以某种方式装饰具有读取器功能的 monad(反之亦然)
假设我只想使用replicateM
from Scalaz;
Option[Int]
现在让我们说,我需要Int
从 a 中读取一个值,而不是拥有a File
:
所以,我可以把这个读者当作一个 Monad 来对待吗?
错,没有。
抱歉,如果这一切看起来很愚蠢,我只是想了解我把它包装File => Option[Int]
在一个罐子里ReaderT
实际上能给我带来什么好处。