结合本地和全局状态的最佳方法是什么

What is the best way to combine local and global state

我有这个全局状态

type GlobalState a = State Int a

但是一个函数需要它自己的本地状态和对 GlobalState 的访问

type LocalState a = State [String] a

但我现在不确定是否将它们结合起来。

现在我只是将本地状态添加到全局状态

type GlobalState a = State (Int, [String]) a

它工作正常,但我认为它不对,因为我只需要在一个函数中使用本地状态。 有没有更好的方法?

您可以使用两个 State 中的 monad stack

type LocalState a = [String]
type GlobalState a = [String]
newtype MyState a = StateT GlobalState (State LocalState) a