Что делает ключевое слово `forall` в Haskell / GHC?

Я начинаю понимать, как forallключевое слово используется в так называемых «экзистенциальных типах», например: data ShowBox = forall s. Show s => SB s Однако это только часть того, как forallэто используется, и я просто не могу сосредоточиться на его использовании в таких вещах: runST :: forall...