module Resolve.Retry where import Resolve.Types import Data.Typeable import Control.Exception data RetryOut = RetryOut deriving (Show, Typeable) instance Exception RetryOut retry :: Int -> Resolve a b -> Resolve a b retry n r a = let loop n = if n == 0 then throw RetryOut else do m <- try (r a) case m of Left e -> do let x = e :: SomeException loop (n - 1) Right b -> return b in loop n