Haskell的state State s a迫使我在整个do块中保持相同类型的s。但是既然state实际上只是一个函数,那么如果我将它定义为State i o a = State (i -> (o, a))呢?中实现Monad是不可能的,因为它需要绑定中的单个State i o类型(只有a可以更改)。但这个问题不是关于Haskell的,而是技术上这是否是一个单一的问题。或者如果不是,它会是某种单一的超集(例如,所有单一法规仍然适用,但有一些额外的特点)?这是我发现在我正在研究的另一种语言中很<em