Äußerlich gebundene Typdeklarationen ohne ScopedTypeVariables

Ich habe folgende Arbeitsdefinition:

{-# LANGUAGE ScopedTypeVariables #-}
module Control.Retry where

import Prelude hiding (catch)
import Control.Exception
import Control.Concurrent

retrying [] action = action 
retrying (i:is) action = catch action processError
  where 
    processError (e :: IOException) = threadDelay i >> retrying is action

Aus reiner Neugier frage ich mich, wie ich das ohne den Einsatz von neu implementieren könnteScopedTypeVariables Pragma, oder ob ich das überhaupt könnte, und worauf die Typdeklaration schließen lässtprocessError ist eigentlich, weil spezifizierenprocessError :: IOException -> IO a macht es unkompilierbar.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage