我正在努力实现以下目标:我输入的 API 请求的方式是它们返回所需的值,或者在状态代码未指示成功或身份验证令牌无效时返回错误等:Either String r
。
eval
现在,当我查询我的组件时,我不想关心它。我只对快乐路径感兴趣(像无效登录尝试这样的预期错误被认为是快乐路径,只是想避免意外的东西),并且应该统一和全局处理错误(向总线发送一些通知)。
为此,我创建了变压器堆栈:
type App = ReaderT Env (ExceptT String (Aff AppEffects))
现在,要将它与 一起使用runUI
,我需要提供要与它一起使用的自然转换hoist
(除非我错过了其他可能性):
runApp :: Env -> App ~> Aff AppEffects
runApp env app = do
res <- runExceptT $ runReaderT app env
case res of
Right r -> pure unit
Left err -> do Bus.write err env.bus
-- what to return here?
因为我们在~>
这里使用,所以我们被迫保留返回类型,但是对于Left
我手头没有它的情况!
如何解决这样的要求?重申一下 - 我只想在执行的操作遇到错误时“取消”我的组件查询的评估,但我想默默地做它并从顶部处理它。