module Faker.Class ( MonadFake(..) ) where import Faker (FakeT(..), Fake) import Control.Monad.IO.Class import Control.Monad.Trans.Class (MonadTrans(lift)) import Control.Monad.Trans.Except (ExceptT) import Control.Monad.Trans.Identity (IdentityT) import Control.Monad.Trans.Maybe (MaybeT) import Control.Monad.Trans.Reader (ReaderT) import Control.Monad.Trans.State (StateT) import Control.Monad.Trans.Writer (WriterT) class Monad m => MonadFake m where liftFake :: Fake a -> m a instance MonadIO m => MonadFake (FakeT m) where liftFake :: Fake a -> FakeT m a liftFake (Fake FakerSettings -> IO a f) = (FakerSettings -> m a) -> FakeT m a forall (m :: * -> *) a. (FakerSettings -> m a) -> FakeT m a FakeT (IO a -> m a forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO a -> m a) -> (FakerSettings -> IO a) -> FakerSettings -> m a forall b c a. (b -> c) -> (a -> b) -> a -> c . FakerSettings -> IO a f) instance MonadFake m => MonadFake (ReaderT r m) where liftFake :: Fake a -> ReaderT r m a liftFake = m a -> ReaderT r m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m a -> ReaderT r m a) -> (Fake a -> m a) -> Fake a -> ReaderT r m a forall b c a. (b -> c) -> (a -> b) -> a -> c . Fake a -> m a forall (m :: * -> *) a. MonadFake m => Fake a -> m a liftFake instance (Monoid w, MonadFake m) => MonadFake (WriterT w m) where liftFake :: Fake a -> WriterT w m a liftFake = m a -> WriterT w m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m a -> WriterT w m a) -> (Fake a -> m a) -> Fake a -> WriterT w m a forall b c a. (b -> c) -> (a -> b) -> a -> c . Fake a -> m a forall (m :: * -> *) a. MonadFake m => Fake a -> m a liftFake instance MonadFake m => MonadFake (StateT s m) where liftFake :: Fake a -> StateT s m a liftFake = m a -> StateT s m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m a -> StateT s m a) -> (Fake a -> m a) -> Fake a -> StateT s m a forall b c a. (b -> c) -> (a -> b) -> a -> c . Fake a -> m a forall (m :: * -> *) a. MonadFake m => Fake a -> m a liftFake instance MonadFake m => MonadFake (IdentityT m) where liftFake :: Fake a -> IdentityT m a liftFake = m a -> IdentityT m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m a -> IdentityT m a) -> (Fake a -> m a) -> Fake a -> IdentityT m a forall b c a. (b -> c) -> (a -> b) -> a -> c . Fake a -> m a forall (m :: * -> *) a. MonadFake m => Fake a -> m a liftFake instance MonadFake m => MonadFake (ExceptT e m) where liftFake :: Fake a -> ExceptT e m a liftFake = m a -> ExceptT e m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m a -> ExceptT e m a) -> (Fake a -> m a) -> Fake a -> ExceptT e m a forall b c a. (b -> c) -> (a -> b) -> a -> c . Fake a -> m a forall (m :: * -> *) a. MonadFake m => Fake a -> m a liftFake instance MonadFake m => MonadFake (MaybeT m) where liftFake :: Fake a -> MaybeT m a liftFake = m a -> MaybeT m a forall (t :: (* -> *) -> * -> *) (m :: * -> *) a. (MonadTrans t, Monad m) => m a -> t m a lift (m a -> MaybeT m a) -> (Fake a -> m a) -> Fake a -> MaybeT m a forall b c a. (b -> c) -> (a -> b) -> a -> c . Fake a -> m a forall (m :: * -> *) a. MonadFake m => Fake a -> m a liftFake