问题标签 [io-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 投票
2 回答
1452 浏览

haskell - Haskell——双重人格IO / ST monad?

我有一些代码目前使用 ST monad 进行评估。我不喜欢将 IO 放在任何地方,因为该runST方法会产生纯结果,并表明这样的结果可以安全调用(相对于unsafePerformIO)。但是,由于我的一些代码变得更长,我确实想将调试打印语句放入其中。

是否有任何类提供双重人格 monad [或 typeclass 机器],可以是 ST 或 IO(取决于其类型或“isDebug”标志)?我记得 SPJ 在他的“Fun with Type Functions”论文中引入了一个“Mutation”类,它使用关联类型将 IO 与 IORef 和 ST 与 STRef 相关联。这样的东西在某处作为一个包存在吗?

编辑/解决方案

非常感谢 [第 n 次],CA McCann!pdebug使用该解决方案,我能够为支持函数的 monad 引入一个附加类。monad将ST忽略这些调用,而IO将运行putStrLn.

这在 ghci 中有一个非常幸运的结果。由于默认情况下它期望表达式是 IO 类型,运行类似“test 3”的东西会导致 IO monad 被运行,所以你可以很容易地调试它,然后当你真正想要运行时用类似“testR”的东西调用它它。

0 投票
2 回答
2758 浏览

haskell - 显示 IO 类型

我有一个包含 IORef 作为重要元素的数据类型。这意味着没有一种干净的方法可以使它成为show类型类的成员。这还不错,因为我print在 IO monad 中有一个针对这种类型的函数。但是在 GHCi 中很烦人,因为每次我返回其中一个结果时,我都会收到一个错误,指出它无法显示。

有没有办法让在 IO monad 中运行的 GHCi 使用 IO 动作来显示结果?如果没有,写作会有什么负面影响show a = unsafePerformIO $ print a吗?

0 投票
1 回答
3248 浏览

haskell - “评估”和“返回$!”有什么区别?

这是以下文档的摘录evaluate

不一样

一个正确的定义是

来源

这些似乎具有相同的含义。这两个定义有什么区别?

0 投票
2 回答
15141 浏览

haskell - 如何从 Haskell 中的 IO 操作中获取正常值

我有以下功能:

我想从中获得价值Chars而不是IO行动。我知道如何做到这一点,或者是否有可能。

Chars类型基本上只是一个容器:

细节并不那么重要,我只想知道这个函数是否有办法返回 aChars而不是 a IO Chars

如果没有,我如何将它作为参数传递给接受 a 的函数Chars?我对 Haskell I/O 有点陌生,但我不认为我希望所有作为参数的函数Chars都必须IO Chars作为参数,然后提取并重新打包它们。似乎没有必要。

谢谢!

0 投票
2 回答
3104 浏览

haskell - 如何在 Haskell 中将 IO Int 转换为 String?

我正在学习在 Haskell 中使用输入和输出。我正在尝试生成一个随机数并将其输出到另一个文件。问题是随机数似乎返回了一个IO Int我无法转换为Stringusing的东西show

有人可以在这里给我指点吗?

0 投票
3 回答
304 浏览

haskell - 在单个会话中多次打开 stdin 的句柄

代码:

还有更多,但这是相关部分。基本上第 3 行需要多次评估,但 getContents 正在关闭标准输入句柄:

有没有办法重新打开手柄?还是某种阻止 getContents 这样做的方法?(也许我发送了错误的信号。我在 Linux 上通过 Ctrl-D EOF 发送。也许我应该使用 EOT 或其他东西?)

编辑:我已经设法获得所需的行为,但它不会移植到 Windows。

新问题:是否有一种通用的方法可以可移植地打开标准输入的句柄?

0 投票
1 回答
957 浏览

haskell - 这种类型的签名发生了什么?(Haskell 中的 Vector.Mutable 修饰符)

Haskell 中的可变向量具有三个元素级别的修改器:

现在我可以很好地使用这些——

但是这里发生了什么?什么是PrimMonad? 并且是PrimState构造函数?

我知道这里有一些绑定,在一个PrimMonad类单子上。thaw返回m (MVector (PrimState m) a)ma在哪里PrimMonad...但是 monad 包含自己?为什么m在另一个上下文中m

我看到一切基本上都绑定在 this PrimStateor上PrimMonad,但我不明白这与可变/可存储向量有什么关系。那些允许它们存储状态的类型类有什么特别之处吗?

感谢您的时间!

0 投票
5 回答
492 浏览

multithreading - 停止线程交错输出

下面的程序创建了两个并发运行的线程,每个线程随机休眠一段时间,然后将一行文本打印到标准输出。

输出通常看起来像

您如何确保一次只有一个线程可以写入标准输出?这似乎是 STM 应该擅长的那种事情,但是所有的 STM 事务都必须有STM asome的类型a,而打印到屏幕上的动作有 type IO a,而且似乎没有办法嵌入IOSTM中。

0 投票
1 回答
1084 浏览

haskell - 是否可以在 Clojure 中从 Haskell 执行 IO monad?

我查看了algo.monadsfluokitten文档。我还阅读了Jim DueyKonrad HinsenLeonardo Borges的 monad 博客文章。

我能找到的最接近的是Konrad Hinsen 的库 Monadic IO 流- 但这似乎不是“实现 monad 接口”(因为需要更好的措辞)

这是在 Haskell 中使用 ST 的示例

我的问题是:是否可以在 Clojure 中从 Haskell 执行 IO Monad ?你能举个例子吗?

0 投票
4 回答
2874 浏览

haskell - 有没有办法从 IO monad 中解开类型?

我有这个非常简单的功能

我的硬盘驱动器上文件的路径在哪里jsonFile(请原谅缺少 do-notation,但我发现使用起来更清楚)

我的问题是;有没有办法让我放弃这个IO部分,这样我就可以单独使用字节串了?

我知道您可以对某些 monad 进行模式匹配,例如EitherMaybe获取它们的值,但是您可以用 做类似的事情IO吗?

或者换一种说法:有没有办法让我在没有 IO 的情况下readJFile返回?Maybe Response