axel-0.0.5: test/Axel/Test/Monad/ResourceMock.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Axel.Test.Monad.ResourceMock where
import Axel.Monad.Console as Console
import Axel.Monad.FileSystem as FS
import Axel.Monad.Process as Proc
import Axel.Monad.Resource as Res
import Control.Monad.Identity
import Control.Monad.Trans
import System.FilePath
newtype ResourceT m a =
ResourceT (m a)
deriving ( Functor
, Applicative
, Monad
, MonadConsole
, MonadFileSystem
, MonadProcess
)
type Resource = ResourceT Identity
instance MonadTrans ResourceT where
lift = ResourceT
instance (Monad m) => MonadResource (ResourceT m) where
getResourcePath (Res.ResourceId resourceId) =
ResourceT $ pure ("resources" </> resourceId)
runResourceT :: ResourceT m a -> m a
runResourceT (ResourceT x) = x
runResource :: Resource a -> a
runResource = runIdentity . runResourceT