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

0 投票
1 回答
950 浏览

scala - Scala 部分应用类型构造函数推断

我正在使用scala-2.8.1scalaz-5.0。谁能准确解释为什么PartialApply1Of2在一种情况下可以推断出 a 在另一种情况下不能推断?

即使(如前所述!)该方法<|*|>具有MA一个类型参数,而不是两个(如此Validation),这仍然有效。我无法在我的 IDEA REPL 中使用 unicode,所以这里是:

我可以为呼叫提供特定类型,一切都很好。为什么scalac不能推断这个?

在我的 REPL 中,这实际上会导致 scalac 错误,而不是合理的错误消息

0 投票
2 回答
976 浏览

scala - 使用 scalaz 的开源项目示例

任何人都可以指出任何使用scalaz的开源项目吗?

我什至对那些可能以一些小的方式使用 scalaz 的人感兴趣(与其他编程风格混合或只是从 scalaz 中提取一些东西)。

0 投票
1 回答
1497 浏览

scala - 基本 Scalaz 状态问题

我如何使用State来模仿 的行为List.zipWithIndex?到目前为止我想出的(这不起作用)是:

这是非常松散地基于状态示例。正如我所说,它不起作用:

我可以通过更改 case 语句的一行来使其工作:

但这只是感觉不对。任何人都可以帮忙吗?

编辑-更多的玩耍让我明白了这一点

可以改进吗?它是否可以推广到除容器以外的容器List(如果可以,需要哪些类型类?)

编辑 2 -我现在已经概括了它,虽然有点笨拙

或非常相似:

0 投票
4 回答
1056 浏览

scala - scalaz Iteratees 来自 scala Iterator

我编辑了下面的代码,因为我相信我在问题之上错误地组合了 IterV 对象iter.next

我正在Iterateescalaz 中进行试验,我想知道为什么以下方法不起作用。这是我所拥有的:

这将返回:

我期待的地方(Some(1),Some(1))(Some(1),Some(1),Some(2))

我怀疑这与iter.next副作用有关。处理它的最佳方法是什么?

作为比较,直接取自 scalaz网站的源代码示例可以正常工作:

0 投票
1 回答
2574 浏览

scala - Scalaz 验证

我正在尝试在我们的项目中使用 scalaz 验证并遇到以下情况:

现在我必须返回包含可能的参数错误的 ValidationNEL,如果有的话,或者使用经过验证的参数来调用该方法:

我知道,我可以使用 |@| 对于第一部分,但这段代码

将返回ValidationNEL[String, Validation[String, Int]]。有没有办法“压平”这个结果,得到ValidationNEL[String, Int]?

0 投票
2 回答
1792 浏览

scala - 使用 scalaz' 切换函数和对象 |>

当我想切换函数和对象时,我可以使用scalaz |>运算符,这样可以获得更多的可读性。让我给你介绍一个模型函数:

在,我可以用两种方式编写它:但是如果我更通用地定义这个函数,它就会停止工作。为什么编译器不理解这个?String在 trait中肯定存在从某个类混合的隐式转换SeqLike

0 投票
8 回答
31553 浏览

scala - 好的scalaz介绍

最近scalaz引起了我的注意。它看起来很有趣,但是我没有找到任何关于该库的好的介绍。似乎scalaz融合了很多来自haskell和数学的想法。我发现的大多数文章都假设您已经对这些概念感到满意。

我正在寻找的是对库和基础概念的逐步介绍——从简单的基本概念到更高级的(基于基础的)。

我也查看了示例,但我很难找到应该开始学习库的点。

有人可以推荐我一些好的 scalaz 介绍或教程(涵盖基础和高级概念)吗?或者给我答案的起点。


更新

感谢大家的精彩回答!我总结了所有的答案,并在我的博客中添加了更多链接:

https://github.com/OlegIlyenko/hacking-scala-blog/blob/master/posts/Scalaz-Resources-For-Beginners.md

对于那些难以找到 Scalaz 的 API 文档的人来说,他们在这里:

http://docs.typelevel.org/api/scalaz/nightly/index.html#package

0 投票
6 回答
4247 浏览

scala - Clojure 在 Scala 中的“让”等价物

我经常遇到以下情况:假设我有这三个功能

我也有calculate功能。我的第一种方法可能如下所示:

它看起来很漂亮,没有任何花括号——只有一种表达方式。但这不是最优的,所以我最终得到了这段代码:

现在是用大括号括起来的几个表达式。在这样的时刻,我有点羡慕 Clojure。使用let 函数,我可以在一个表达式中定义此函数。

所以我的目标是calculate用一个表达式定义函数。我想出了2个解决方案。

1 - 使用scalaz我可以这样定义它(有没有更好的方法来使用 scalaz?):

我不喜欢这个解决方案的是它是嵌套的。我拥有的 s越多val,这个嵌套就越深。

2 - 通过for理解,我可以实现类似的目标:

一方面,这个解决方案具有扁平结构,就像let在 Clojure 中一样,但另一方面我需要将函数的结果包装起来并作为结果Option接收(这很好,我正在处理空值,但我不...... .并且不想)。Optioncalculate

有没有更好的方法来实现我的目标?处理这种情况的惯用方式是什么(也许我应该和vals 呆在一起......但是let这样做的方式看起来很优雅)?

另一方面,它与参照透明度有关。所有三个函数都是引用透明的(在我的示例中firstFn计算一些常数,如 Pi),因此理论上它们可以用计算结果替换。我知道这一点,但编译器不知道,所以它无法优化我的第一次尝试。这是我的第二个问题:

我能否以某种方式(可能带有注释)向编译器提示我的函数是引用透明的,以便它可以为我优化这个函数(例如,在那里放置某种缓存)?

编辑

感谢大家的精彩回答!选择一个最佳答案是不可能的(可能是因为它们都很好)所以我会接受投票最多的答案,我认为这很公平。

0 投票
1 回答
919 浏览

scala - Scala:类型推断和子类型/更高种类的类型

我一直在和 Scalaz 一起玩,以便在 scala 中获得一点haskell 的感觉。为了理解 scala 中的工作原理,我开始自己实现各种代数结构,并遇到了 Scalaz 人提到的一种行为。

这是我实现仿函数的示例代码:

我为 Option 和一个虚假的 sumtype Foo 编写了一个仿函数实例。问题是 scala 无法在没有显式类型注释或包装方法的情况下推断隐式参数

Scala 在没有这些变通方法的情况下推断出 Functor[Bar] 和 Functor[Some] 之类的类型。

这是为什么?任何人都可以请我指出定义此行为的语言规范中的部分吗?

问候, raichoo

0 投票
3 回答
2029 浏览

scala - 与 monad 不同的 monad-transformer 是什么?

这个问题说明了一切,真的。我知道(Scala)Monad看起来像这样:

Monad Transformer是什么样的?它们是用来做什么的?


编辑考虑以下 REPL 会话:如果 monad 转换器以某种方式装饰具有读取器功能的 monad(反之亦然)

假设我只想使用replicateMfrom Scalaz

Option[Int]现在让我们说,我需要Int从 a 中读取一个值,而不是拥有a File

所以,我可以把这个读者当作一个 Monad 来对待吗?

错,没有。

抱歉,如果这一切看起来很愚蠢,我只是想了解我把它包装File => Option[Int]在一个罐子里ReaderT实际上能给我带来什么好处。