packages feed

cabal-cache-1.2.0.0: src/HaskellWorks/CabalCache/Exit.hs

module HaskellWorks.CabalCache.Exit
  ( catchAndExitFailure,
  ) where

import Effectful
import Effectful.Zoo.Core
import Effectful.Zoo.Core.Error.Static
import Effectful.Zoo.Log.Api
import Effectful.Zoo.Log.Dynamic
import HaskellWorks.Prelude

import qualified System.Exit                        as IO

catchAndExitFailure :: forall e a r. ()
  => Show e
  => r <: IOE
  => r <: Log Text
  => Eff (Error e : r) a
  -> Eff r a
catchAndExitFailure f =
  f & trap @e \e -> do
    crit $ "Error: " <> tshow e
    liftIO IO.exitFailure