问题标签 [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.
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”的东西调用它它。
haskell - 显示 IO 类型
我有一个包含 IORef 作为重要元素的数据类型。这意味着没有一种干净的方法可以使它成为show
类型类的成员。这还不错,因为我print
在 IO monad 中有一个针对这种类型的函数。但是在 GHCi 中很烦人,因为每次我返回其中一个结果时,我都会收到一个错误,指出它无法显示。
有没有办法让在 IO monad 中运行的 GHCi 使用 IO 动作来显示结果?如果没有,写作会有什么负面影响show a = unsafePerformIO $ print a
吗?
haskell - 如何从 Haskell 中的 IO 操作中获取正常值
我有以下功能:
我想从中获得价值Chars
,而不是IO
行动。我不知道如何做到这一点,或者是否有可能。
该Chars
类型基本上只是一个容器:
细节并不那么重要,我只想知道这个函数是否有办法返回 aChars
而不是 a IO Chars
。
如果没有,我如何将它作为参数传递给接受 a 的函数Chars
?我对 Haskell I/O 有点陌生,但我不认为我希望所有作为参数的函数Chars
都必须IO Chars
作为参数,然后提取并重新打包它们。似乎没有必要。
谢谢!
haskell - 如何在 Haskell 中将 IO Int 转换为 String?
我正在学习在 Haskell 中使用输入和输出。我正在尝试生成一个随机数并将其输出到另一个文件。问题是随机数似乎返回了一个IO Int
我无法转换为String
using的东西show
。
有人可以在这里给我指点吗?
haskell - 在单个会话中多次打开 stdin 的句柄
代码:
还有更多,但这是相关部分。基本上第 3 行需要多次评估,但 getContents 正在关闭标准输入句柄:
有没有办法重新打开手柄?还是某种阻止 getContents 这样做的方法?(也许我发送了错误的信号。我在 Linux 上通过 Ctrl-D EOF 发送。也许我应该使用 EOT 或其他东西?)
编辑:我已经设法获得所需的行为,但它不会移植到 Windows。
新问题:是否有一种通用的方法可以可移植地打开标准输入的句柄?
haskell - 这种类型的签名发生了什么?(Haskell 中的 Vector.Mutable 修饰符)
Haskell 中的可变向量具有三个元素级别的修改器:
现在我可以很好地使用这些——
但是这里发生了什么?什么是PrimMonad
? 并且是PrimState
构造函数?
我知道这里有一些绑定,在一个PrimMonad
类单子上。thaw
返回m (MVector (PrimState m) a)
,m
a在哪里PrimMonad
...但是 monad 包含自己?为什么m
在另一个上下文中m
?
我看到一切基本上都绑定在 this PrimState
or上PrimMonad
,但我不明白这与可变/可存储向量有什么关系。那些允许它们存储状态的类型类有什么特别之处吗?
感谢您的时间!
multithreading - 停止线程交错输出
下面的程序创建了两个并发运行的线程,每个线程随机休眠一段时间,然后将一行文本打印到标准输出。
输出通常看起来像
您如何确保一次只有一个线程可以写入标准输出?这似乎是 STM 应该擅长的那种事情,但是所有的 STM 事务都必须有STM a
some的类型a
,而打印到屏幕上的动作有 type IO a
,而且似乎没有办法嵌入IO
到STM
中。
haskell - 是否可以在 Clojure 中从 Haskell 执行 IO monad?
我查看了algo.monads和fluokitten文档。我还阅读了Jim Duey、Konrad Hinsen和Leonardo Borges的 monad 博客文章。
我能找到的最接近的是Konrad Hinsen 的库 Monadic IO 流- 但这似乎不是“实现 monad 接口”(因为需要更好的措辞)
这是在 Haskell 中使用 ST 的示例
我的问题是:是否可以在 Clojure 中从 Haskell 执行 IO Monad ?你能举个例子吗?
haskell - 有没有办法从 IO monad 中解开类型?
我有这个非常简单的功能
我的硬盘驱动器上文件的路径在哪里jsonFile
(请原谅缺少 do-notation,但我发现使用起来更清楚)
我的问题是;有没有办法让我放弃这个IO
部分,这样我就可以单独使用字节串了?
我知道您可以对某些 monad 进行模式匹配,例如Either
并Maybe
获取它们的值,但是您可以用 做类似的事情IO
吗?
或者换一种说法:有没有办法让我在没有 IO 的情况下readJFile
返回?Maybe Response