Мне трудно понять STArray из документации и других действий/обсуждений, которые я нашел через Google. У меня есть еще несколько связанных вопросов.
Согласно документации, STArray
Mutable boxed и unboxed массивы в монаде ST.
Мне показалось, что STArray предполагается использовать как состояние, передаваемое между функциями (представьте, что у вас есть вектор, который нужно часто обновлять).
По-видимому, это используется по-разному:
ST s (STArray s a e)
Что такое состояние s здесь? Если он используется внутри, то почему это не скрыто от пользователя?
Это также означает, что если мы хотим использовать STArray s Int Int, передаваемое как состояние, можно было бы определить
type StateArray a = Control.Monad.State (ST s (STArray s Int Int)) a
который кажется довольно громоздким.
Наконец,
-  В чем разница между 
STиState? -  В чем разница между 
STArrayиIOArray, еслиSTиIOпредназначены для использования "внутри"? 
Спасибо!