从Control.Retries在Haskell中使用limitRetries的示例

从Control.Retries在Haskell中使用limitRetries的示例,haskell,exception-handling,Haskell,Exception Handling,重试包看起来很整洁: 我有一个典型的 main :: IO () main = do stuff 我想用指数退避重试5次 我知道有一项政策针对: exponentialBackoff limitRetries 以及一个策略转换器,用于: limitRetriesByDelay 我也明白 def下的默认值会执行一个恒定的50毫秒延迟,最多5次 第一:如何将我的main包装在此(或我的stuff函数)中,以便使用指数退避重试5次 第二:这是一个处理失败的好软件包,还是其他异常处理技术更

重试包看起来很整洁:

我有一个典型的

main :: IO ()
main = do 
  stuff
我想用指数退避重试5次

我知道有一项政策针对:

exponentialBackoff
limitRetries
以及一个策略转换器,用于:

limitRetriesByDelay
我也明白

def下的默认值会执行一个恒定的50毫秒延迟,最多5次

第一:如何将我的
main
包装在此(或我的
stuff
函数)中,以便使用指数退避重试5次


第二:这是一个处理失败的好软件包,还是其他异常处理技术更好或更惯用?

要使这项工作正常,您可能只需要
main=recoverAll(exponentialBackoff 50 limitRetries 5)(const stuff)
。嗯,我认为这是可行的。我无法导入数据。Monoid()似乎必须使用导入数据。Monoid(mappend)。您可能忘记了导入运算符时需要的额外参数集:
导入数据。Monoid(())
:)我在我的stuff函数中使用了
die“error accounted”
。您是否有更好的建议:如果
stuff->IO Bool
而不是文件系统die命令,这是否是一个更好的主意?它似乎有效,但似乎不雅观。@Alec,我坚决不同意
错误
,我认为它应该只用于内部错误(不可能的情况)。1.如果需要更改,则很难将使用
error
表示的不可恢复错误转换为可恢复错误——程序可能必须重新构造。2.错误可能会被延迟(由于懒惰的结果),这使得调试变得困难,并且当一个旧的错误块被强制在某个敏感的I/O操作的中间时,程序可能会出现严重的错误。为了使这项工作有效,您可能只需要<代码>主=恢复符(指数式退避50限制性重试)5(const Toes)< /C> >我认为这是有效的。我无法导入数据。Monoid()似乎必须使用导入数据。Monoid(mappend)。您可能忘记了导入运算符时需要的额外参数集:
导入数据。Monoid(())
:)我在我的stuff函数中使用了
die“error accounted”
。您是否有更好的建议:如果
stuff->IO Bool
而不是文件系统die命令,这是否是一个更好的主意?它似乎有效,但似乎不雅观。@Alec,我坚决不同意
错误
,我认为它应该只用于内部错误(不可能的情况)。1.如果需要更改,则很难将使用
error
表示的不可恢复错误转换为可恢复错误——程序可能必须重新构造。2.错误很可能会被延迟(由于懒惰的结果),这使得调试变得困难,并且当一个旧的错误块被强制在某个敏感的I/O操作的中间时,程序可能会发生错误的行为。