我有以下工作定义:
{-# 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
只是出于好奇,我想知道如何在不使用ScopedTypeVariables
pragma 的情况下重新实现它,或者我是否可以,以及推断的类型声明processError
实际上是什么,因为指定processError :: IOException -> IO a
使它无法编译。