`StateT a STM b` 中的 Haskell IO 操作

标签 haskell monad-transformers state-monad stm io-monad

我想在我的 StateT a STM b 中运行 randomIO 但出现此错误:

Expected type: StateT Session STM Float
  Actual type: IO Float

所以我尝试从 Control.Monad.Trans.Classlift'ing(由 State 的 Strict 模块重新导出):

Expected type: StateT Session STM Float
  Actual type: StateT Session IO Float

这更接近但不完全在那里。我无法 liftIO,因为 STM 没有 MonadIO 实例。

如何对其进行编译,以便我可以在 StateT 内的 STM 内运行 randomIO

最佳答案

根据评论,我正在尝试一些愚蠢的事情。相反,我使用 randomRs (0.0, 1.0) g 将所需的随机 Float 列表传递给我的函数。

关于 `StateT a STM b` 中的 Haskell IO 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57440981/

相关文章:

haskell - 如何将二进制网络数据包结构映射到 Haskell 标准数据类型(记录)?

optimization - 解包严格字段如何与多态性结合在一起?

haskell - 在 Scotty 服务器中 fork 新线程

haskell - 如何编写状态 Monad 的实例

haskell - 创建多态函数的事件流 - 可能吗?如果是,如何?

haskell - stack 如何从 extra-deps 中找到包?

scala - NonEmptyList 的 Monad 转换器?

haskell - 如何将 MonadLogger 添加到我的免费 monad 转换器堆栈中?

haskell - 在这种情况下,为什么在与嵌套的 StateT monadT 交互时不需要使用 'lift'?

haskell - 对 "Learn you a Haskell"上的 State Monad 代码感到困惑