--- The first parameter is used solely to keep the states of different
--- invocations of 'runST' separate from each other and from invocations
--- of 'Control.Monad.ST.stToIO'. In the first case the type parameter
--- is not instantiated; in the second it is 'RealWorld'.
+-- A computation of type @'ST' s a@ transforms an internal state indexed
+-- by @s@, and returns a value of type @a@.
+-- The @s@ parameter is either
+--
+-- * an unstantiated type variable (inside invocations of 'runST'), or
+--
+-- * 'RealWorld' (inside invocations of 'Control.Monad.ST.stToIO').
+--
+-- It serves to keep the internal states of different invocations
+-- of 'runST' separate from each other and from invocations of
+-- 'Control.Monad.ST.stToIO'.