fakedata-1.0: src/Faker/Class.hs
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 f) = FakeT (liftIO . f)
instance MonadFake m => MonadFake (ReaderT r m) where
liftFake = lift . liftFake
instance (Monoid w, MonadFake m) => MonadFake (WriterT w m) where
liftFake = lift . liftFake
instance MonadFake m => MonadFake (StateT s m) where
liftFake = lift . liftFake
instance MonadFake m => MonadFake (IdentityT m) where
liftFake = lift . liftFake
instance MonadFake m => MonadFake (ExceptT e m) where
liftFake = lift . liftFake
instance MonadFake m => MonadFake (MaybeT m) where
liftFake = lift . liftFake