LINUX.ORG.RU

История изменений

Исправление 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)