为什么就地突变用“IO”表示?

Joe*_*ley 1 language-agnostic haskell functional-programming in-place mutation

为什么可变数据结构和其他可变性用IO函数式语言来表示?我正在看例如 Haskell'sIORef或 Idris' IOArray

我不认为这是一个历史或设计问题。我不太明白为什么IO适合突变 - 或者更确切地说,为什么突变封装在IO.

lef*_*out 5

您不需要用 来代表它们IO。可以用它们代替ST。但显然你可以用 来表示它们IO,这样就可以实现任何肮脏的副作用。因此,如果您IO无论如何都在工作,最简单的方法就是在那里进行突变,这样您就无需担心将不同的单子焊接在一起。如果您还没有在 中工作IOST那么您应该使用。