{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}

{-# OPTIONS_GHC -Wno-orphans #-}

module Hedgehog.Extras.Internal.Orphans () where

import Control.Applicative
import Control.Monad.Base
import Control.Monad.IO.Class
import Control.Monad.Trans.Control
import Control.Monad.Trans.Resource
import System.IO (IO)
import UnliftIO qualified

instance MonadBase IO (ResourceT IO) where
  liftBase :: forall α. IO α -> ResourceT IO α
liftBase = IO α -> ResourceT IO α
forall α. IO α -> ResourceT IO α
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO

instance MonadBaseControl IO (ResourceT IO) where
  type StM (ResourceT IO) a = a
  liftBaseWith :: forall a. (RunInBase (ResourceT IO) IO -> IO a) -> ResourceT IO a
liftBaseWith = ((forall a. ResourceT IO a -> IO a) -> IO a) -> ResourceT IO a
(RunInBase (ResourceT IO) IO -> IO a) -> ResourceT IO a
forall b.
((forall a. ResourceT IO a -> IO a) -> IO b) -> ResourceT IO b
forall (m :: * -> *) b.
MonadUnliftIO m =>
((forall a. m a -> IO a) -> IO b) -> m b
UnliftIO.withRunInIO
  restoreM :: forall a. StM (ResourceT IO) a -> ResourceT IO a
restoreM = a -> ResourceT IO a
StM (ResourceT IO) a -> ResourceT IO a
forall a. a -> ResourceT IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure