{-# OPTIONS_GHC -Wno-orphans #-}
module Control.Carrier.Orphans
(
)
where
import Control.Carrier.Interpret
import Control.Carrier.Lift
import Control.Carrier.Reader
import qualified Control.Carrier.Trace.Ignoring as TI
import qualified Control.Carrier.Trace.Printing as TP
import Control.Monad.IO.Unlift
instance MonadUnliftIO m => MonadUnliftIO (LiftC m) where
askUnliftIO = LiftC $ withUnliftIO $ \u -> return (UnliftIO (unliftIO u . runM))
{-# INLINE askUnliftIO #-}
withRunInIO inner = LiftC $ withRunInIO $ \run' -> inner (run' . runM)
{-# INLINE withRunInIO #-}
instance MonadUnliftIO m => MonadUnliftIO (ReaderC r m) where
askUnliftIO = ReaderC $ \r -> withUnliftIO $ \u -> pure (UnliftIO (\(ReaderC x) -> unliftIO u (x r)))
{-# INLINE askUnliftIO #-}
withRunInIO inner = ReaderC $ \r -> withRunInIO $ \go -> inner (go . runReader r)
{-# INLINE withRunInIO #-}
instance MonadUnliftIO m => MonadUnliftIO (InterpretC s sig m) where
askUnliftIO = InterpretC $ withUnliftIO $ \u -> return (UnliftIO (\(InterpretC m) -> unliftIO u m))
{-# INLINE askUnliftIO #-}
withRunInIO inner = InterpretC $ withRunInIO $ \run' -> inner (\(InterpretC m) -> run' m)
{-# INLINE withRunInIO #-}
instance MonadUnliftIO m => MonadUnliftIO (TI.TraceC m) where
askUnliftIO = TI.TraceC $ withUnliftIO $ \u -> return (UnliftIO (unliftIO u . TI.runTrace))
{-# INLINE askUnliftIO #-}
withRunInIO inner = TI.TraceC $ withRunInIO $ \run' -> inner (run' . TI.runTrace)
{-# INLINE withRunInIO #-}
instance MonadUnliftIO m => MonadUnliftIO (TP.TraceC m) where
askUnliftIO = TP.TraceC $ withUnliftIO $ \u -> return (UnliftIO (unliftIO u . TP.runTrace))
{-# INLINE askUnliftIO #-}
withRunInIO inner = TP.TraceC $ withRunInIO $ \run' -> inner (run' . TP.runTrace)
{-# INLINE withRunInIO #-}