{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
module Control.Eff.ExceptionExtra
( liftTry
, module X
)
where
import qualified Control.Exception as Exc
import Control.Eff
import Control.Eff.Lift
import Control.Eff.Exception as X
import GHC.Stack
liftTry
:: forall e r a
. (HasCallStack, Exc.Exception e, SetMember Lift (Lift IO) r)
=> Eff r a
-> Eff r (Either e a)
liftTry m = (Right <$> m) `catchDynE` (return . Left)