私は、以下の目標を達成するのに苦労しています。希望の値を返すように、またはステータスコードが成功を示していないときにエラーを返すように、認証トークンが無効です。Either String r
。ハロゲンコンポーネントクエリのthrowError
今、私はコンポーネントのクエリを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
ケースのために私は手でそれを持っていません!
どのようにそのような要件に取り組んでいますか?繰り返す - 私は、実行されたアクションがエラーに遭遇したときにコンポーネントクエリの評価を 'キャンセル'できるようにしたいが、それを静かに行い、上から処理したい。