如何将 monadic 函数转换为 monadic 状态转换器?

How can I turn a monadic function into a monadic state transformer?

基本上,我想要的是:

stateIO :: (s -> IO (a, s)) -> StateT s IO a
stateIO f = do
    r <- get
    (a, r') <- liftIO $ f r
    put r'
    return a

我试过用state,但是里面的liftIO有问题。有没有另一种更聪明的方法,无需手动解包元组?

哦,好吧。谢谢@bisserlis。

stateIO = StateT

(可能用于避免单态限制)。