问题标签 [reader-monad]

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 回答
353 浏览

scala - Scala 中依赖注入的读者组成

这是一个简单的服务示例,其方法返回 reader:

这是一个服务消费者,它接受参数、映射,并返回阅读器本身:

好的,要使用 Service1_2.s12f1 我必须在参数列表中有地图:

问题:如何实施Service1_2.s12f2

为了能够像这样运行它:

主要思想是推迟将依赖传递给执行。这应该允许获得更好的组合和延迟执行。如何让它工作?阅读器的最佳实践是什么,以防存在具有此类依赖关系的嵌套调用。例如,想象一下服务,Service1_3它在一种方法中将同时使用Service1_2.s2f2Service1_1.s1f1

UPDATE,好的,我可以实现它,但它看起来过于复杂:

问题是,有没有更好的方法?或者至少是语法?因为有几个级别的依赖,它看起来会很奇怪。

0 投票
1 回答
305 浏览

scala - Scala:阅读器内部带有防护功能的理解

这是代码示例:

错误是:

错误:(17, 13) 值 withFilter 不是 cat.data.ReaderT[TestQ.this.FailFast,Map[String,String],Boolean] b1 <- f1 的成员

如何用 f2 组合 f1。仅当 f1 返回 Right(true) 时才必须应用 f2。我通过以下方式解决了它:

但我希望有一个更优雅的解决方案。

0 投票
1 回答
433 浏览

scala - Scala-cats,用 ReaderT 编写 Reader

这是一个小的函数组合,所有这些函数都返回ReaderT

如何实现fc以防万一f1返回Reader,但不是ReaderT

现在我必须作曲,Reader这正是ReaderT[Id, ...]Reader[FailFast, ...]

0 投票
1 回答
125 浏览

scala - How to inject dependencies through Scala Reader from Java code

Here is a dependency service:

Scala code that uses it via reader:

Java test where I try to inject Service1:

I am getting an exception:

Error:(10, 16) java: method run in class cats.data.Kleisli cannot be applied to given types; required: no arguments found: com.savdev.Service1 reason: actual and formal argument lists differ in length

Although in Scala I would be able to run it as:

0 投票
1 回答
167 浏览

scala - Scala:通过阅读器和兼容性进行依赖注入

当我们通过 Reader 实现 DI 时,我们将依赖项作为方法签名的一部分。假设我们有(没有实现):

现在,f2需要额外的服务来实现,比如:

它将破坏现有客户,如果Service2.f2不提供Service3额外服务,他们将无法再使用。

通过注入(通过构造函数或设置器)进行 DI,这在 OOP 中很常见,我将c仅用作Service2. 它是如何构造的以及它的依赖项列表是什么,我不在乎。从这一点开始,任何新的依赖都Service2将保持函数的签名c不变。

它是如何以FP方式解决的?有选择吗?有没有办法注入新的依赖项,但以某种方式保护客户免受更改?

0 投票
1 回答
53 浏览

scala - Scala:用 ReaderT 和 Option 编写理解

这是示例:

它工作正常。我只想重写s2f1没有ReaderT.apply方法:

这是一个工作示例Reader[...,Int],但不是ReaderT[Option,...]

我想获得类似的语法。

0 投票
1 回答
136 浏览

scala - Scala:具有不同上下文和依赖关系的 ReaderT 组合

返回不同 ReaderT的s3f1s3f2函数的示例:

我尝试组合这两个函数,它们返回具有不同F[_]上下文和依赖关系的读者:ReaderT[Option, Service1, Int]ReaderT[FailFast, Service2, Int]

我必须以某种方式F[_]结合上下文,这意味着FailFast结合Option. 我认为,将它结合起来是有意义的FailFast[Option]

如何组合 s3f1 和 s3f2:

0 投票
1 回答
314 浏览

scala - Scala-cats:阅读器组合

错误:

错误:(26, 11) 类型不匹配;找到:T1.this.Env => com.savdev.Cats(扩展为)((com.savdev.Service1,com.savdev.Service2,com.savdev.Cats))=> com.savdev.Cats required:com .savdev.Cats } 产生猫

你能解释一下,为什么猫不是com.savdev.Cats?以及为什么在错误中,它说它被扩展为具有返回方法的函数[Cats],而不是机器人FailFast[Cats]

我尝试应用与此处完全相同的逻辑:

在此示例中,我可以将函数 Service1.s1f 转换为其结果 r2 并且它工作正常。为什么我不能,例如写这样的东西:

0 投票
2 回答
601 浏览

haskell - Reader monad 能做哪些应用函数不能做的事情?

阅读http://learnyouahaskell.com/functors-applicative-functors-and-monoids#applicative-functors后,我可以提供一个将函数用作应用函子的示例:

假设res是一个有 4 个参数的函数,fa, fb, fc,fd都是接受单个参数的函数。然后,如果我没记错的话,这个适用的表达式:

意思与这个非花哨的表达相同:

啊。我花了相当多的时间来理解为什么会这样,但是——在一张纸和我的笔记的帮助下——我应该能够证明这一点。

然后我阅读了http://learnyouahaskell.com/for-a-few-monads-more#reader。我们又回到了这个问题上,这次是单子语法:

虽然我需要另一张 A4 纸来证明这一点,但我现在非常有信心,这再次意味着相同:

我很困惑。为什么?这有什么用?

或者,更准确地说:在我看来,这似乎只是将函数的功能复制为应用程序,但语法更冗长。

那么,你能给我举个例子,说明 Reader monad 能做到 applicatives 不能做到的吗?

实际上,我还想问这两个中的任何一个有什么用:应用函数或 Reader monad - 因为虽然能够将相同的参数应用于四个函数(fa, fb, fc, fd)而不用重复这个参数四次确实减少了一些重复性,我不确定这一微小的改进是否能证明这种复杂程度;所以我想我一定错过了一些突出的东西;但这值得一个单独的问题

0 投票
1 回答
275 浏览

performance - StateT over Reader 和 ReaderT over State 之间有什么显着区别吗?

当我设计我的编程模型时,我总是陷入困境,哪种方法更好:

使用一个monad而不是另一个monad有什么好处和权衡?这有关系吗?性能怎么样?