问题标签 [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 投票
0 回答
39 浏览

haskell - 不同的读者行为

我正在围绕 Warp 服务器编写一个包装器,用户可以在其中指定路由和处理程序来创建 Web 服务器。我决定尝试使用 Continuation Monads 来允许处理程序在路由匹配时使用延续退出。以下是我开始使用的类型和定义:

一个app是一个路由的集合,每个路由从Reader环境中读取当前的continuation;我最初是这样写的:

奇怪的是,这似乎不起作用,它只打印“Checking /goodbye”;但是,如果我们改为以下一种形式编写阅读器,则它可以正常工作,据我所知,这两个定义应该是等效的;但显然我错过了一些东西:

有什么方法可以让我使用原始应用程序定义获得正确的行为?Reader Monad 是否以某种方式弄乱了延续?

我怀疑 reader 的 monad 定义以某种方式中断了计算顺序;但我不清楚如何:

谢谢!

0 投票
1 回答
136 浏览

haskell - 修改变压器堆栈中的内部阅读器

我正在从许多不同的地方收集代码,我正在尝试处理以下问题:

问题

我有一个具有以下简化类型的变压器堆栈:

我正在尝试在具有不同阅读器环境的不同堆栈的上下文中使用该操作:

我当然可以提供

例子

我考虑过的

这有一个问题,ReaderT 是外部单子,而我想在内部单子上使用它。

我也认为这可能与 MonadBase 或 MonadTransControl 有关,但我不熟悉它们的工作原理。

0 投票
2 回答
1444 浏览

haskell - 理解 Reader monad

我正在阅读PureScript by Example并进入了介绍 Reader monad 的部分。这个例子是这样的:

对我来说令人困惑的部分是ask功能。签名是:

看起来好像它凭空创造了一个阅读器

当我阅读有关Statemonad 的内容时,它的get功能具有相同的概念。文字解释道:

state 被实现为一个隐藏在 State monad 的数据构造函数中的函数参数,因此没有明确的引用可以传递。

我猜这是关键,阅读器也发生了同样的事情,但我不明白它是如何工作的......

当上面的例子通过 运行时runReader,提供的值是如何突然出现的ask?Haskell 文档ask说:检索 monad 环境。但我的困惑来自哪里?在我看来,一个值被传递给runReader,被存储在某个地方,然后得到它 - 你打电话ask......但这没有任何意义。

虽然这个例子是 PureScript,但我猜任何懂 Haskell 的人也能回答,因此有了 Haskell 标签。

0 投票
3 回答
267 浏览

haskell - 读者单子澄清

我试图理解 reader monad,但似乎无法理解 bind (>>=) 在这个 monad 中的作用。

这是我正在分析的实现:

  1. 我的第一个问题是,为什么 Reader 部分应用在 bind 的左侧?(Reader r)而不是(Reader r a).
  2. 定义的这一部分发生了(f (r e))什么:,它的目的是什么?

非常感谢你帮助我。

0 投票
1 回答
119 浏览

f# - 如何将 Result<'a,'b> 映射到阅读器在 f# 中?

我有将函数映射到“Reader-Result”的功能,其中 f 是'a->'b: ('a->'b) -> Reader<Result<'a,'c>> -> Reader<Result<'b,'c>>

但是如何编写一个以函数'a->Result<'b,'c>为输入的类似地图呢?

0 投票
2 回答
1265 浏览

haskell - Reader Monad - 琐碎案例的解释

我一直在努力掌握 reader monad 并遇到了本教程。在其中,作者提出了这个例子:

我知道这是一个显示机制的简单示例,但我试图弄清楚为什么它比执行以下操作更好:

0 投票
1 回答
881 浏览

haskell - 实现 Reader monad(来自 Real World Haskell 书)

我很难理解这两个片段。我可以说第一个是具有runReaderfrom eto功能的阅读器的记录语法描述a,但第二个让我感到困惑。

m通过与绑定k,它本质上是在尝试创建一个新的Reader,但是如何

锻炼?我以为runReader只需要一个参数,但现在似乎需要两个参数,一个是存在k (runReader m r),另一个是存在r

提前致谢。

0 投票
1 回答
434 浏览

haskell - 更喜欢 Reader monad 而不是直接将环境作为参数传递

我正在使用库 Servant 和 Opaleye 在 Haskell 中编写一个基本的 CRUD 应用程序。

Servant 设置 API 端点和 Opaleye 以将数据存储在 DB 中。

假设有一个端点GET /users从数据库返回所有用户的列表,另一个端点POST /user创建一个新用户并将其保存在数据库中。

该程序通过启动与 DB 的连接,然后将此连接作为参数传递给这些 API 端点函数(使用 Servant 设置)作为参数。

有人建议我更好的方法是使用 Reader Monad 并将连接存储在环境中。

我能够做到,但我不明白为什么 Reader Monad 是共享环境的首选方式,而不是直接传递参数。

PS - 作为 Haskell 的初学者,我可以使用 Monads,按照教程运行我的程序,但我并不真正了解它们背​​后隐藏的美丽数学。这就是为什么,我想避免使用单子(直到我完全理解单子背后的想法)。

这是我的代码,顺便说一句。

0 投票
1 回答
60 浏览

java - 如何在 Java 中使用 scalaz.Reader

我有一个用 Scala 编写的服务,scalaz.Reader用于 DI 并对其进行测试。

在测试op中定义功能,组成服务的功能。

测试:

现在我正在尝试用 Java 代码编写相同的测试。我什至无法定义op函数的签名:

我现在得到:

我想念什么?如何实现opfrom Java 代码?

0 投票
1 回答
108 浏览

haskell - 修改 ReaderT 中的 ST 依赖环境 – `local` 函数的问题

这个问题是这个线程的续集:https ://stackoverflow.com/a/54317095/4400060

我在那里询问有关携带STRefReaderT环境并在其下执行 ST-actions 的问题。我的设置现在看起来像:

总的来说它很酷——我可以dataspace自由地访问或修改。但是,当我添加不可变时,namespace我开始挣扎。我需要的功能是以不会影响进一步计算的命名空间的方式运行Comp更新的操作namespace——正是这样local做的。

首先,我想为 编写MonadReader实例Comp,但是我遇到了ST的幻像类型并得到了illegal instance错误:

完整的错误信息:

我理解这个错误,但我认为没有办法绕过它。老实说,我并不需要完整local的功能。我只需要能够以Comp不同namespace但相同的方式运行dataspace

最好的解决方案是提供完整的MonadReader实例。我知道这可能是不可能的,所以作为一种解决方法,我想要一个函数


总结:我希望能够在Comp修改后运行,namespace同时保持dataspace不变作为参考,保留所有更改。

怎么做?如果需要,我可以接受修改我的初始设置。