我有一个 Map Int String -> Proxy () a () Void IO b
类型的函数 . 现在它 await
s,做任何有 Value 的东西,然后重新调用自己 . 我想将它更改为使用 State (Map Int String)
而不是将其作为参数传递,所以我可以使用 forever
并且不需要让每个分支都记得递归 . 我得到了我需要使用 StateT
将 State
与另一个monad组合,但我不明白 StateT
属于该类型签名的位置,或者我是否需要 lift
函数如 get
. State (Map Int String)
和 Proxy () a () Void IO b
函数的正确类型是什么?
1 回答
注意:
Proxy () a () Void = Consumer a
,所以我将这个答案称为Consumer
.简单的方法是将
StateT
monad变换器层放在Consumer
层之外,然后立即运行它 . 这是一个例子:......这就是它在行动中的表现: