Declarações de tipo de limite externo sem ScopedTypeVariables

Eu tenho uma definição de trabalho a seguir:

{-# 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

Apenas por curiosidade eu estou querendo saber como eu poderia reimplementar isso sem utilizar oScopedTypeVariables pragma, ou se eu poderia em tudo, e que tipo de declaração inferida deprocessError na verdade é, porque especificandoprocessError :: IOException -> IO a faz com que seja uncompilable.

questionAnswers(3)

yourAnswerToTheQuestion