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

Haskell IO action in `StateT a STM b`

我想 运行 randomIO 在我的 StateT a STM b 中,但我得到这个错误:

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

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

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

哪个更近,但不完全在那里。我不能 liftIO 因为 STM 没有 MonadIO 实例。

我怎样才能编译它,这样我就可以 运行 randomIO inside STM inside 我的 StateT?

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