История изменений
Исправление qnikst, (текущая версия) :
run :: (a -> IO b) -> a -> (a -> e -> Maybe a) -> IO b
run f x recover = f `onException` (\e -> recover a e >>= \my -> case my of Nothing -> throw e; Just y -> run f y recover)
относится ли это каким-нибудь боком к лисповым рестартам я не знаю.
Исходная версия qnikst, :
run :: (a -> IO b) -> a -> (a -> e -> Maybe a) -> IO b
run f x recover = f `onException` (\e -> recover a e >>= \my -> case my of Nothing -> throw e; Just y -> run f y recover)