module-management-0.20.2: testdata/merge5/Apt/Instances.hs
{-# LANGUAGE FlexibleContexts, FlexibleInstances, GeneralizedNewtypeDeriving, MultiParamTypeClasses,
PackageImports, TypeSynonymInstances, UndecidableInstances #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
-- |AptIO is an instance of the RWS monad used to manage the global
-- state and output style parameters of clients of the Apt library,
-- such as the autobuilder.
module Apt.Instances
(
) where
import "MonadCatchIO-mtl" Control.Monad.CatchIO (MonadCatchIO)
import Control.Monad.Reader (ReaderT)
import Control.Monad.State (get, MonadIO, MonadTrans(lift), put)
import Apt.AptIOT (AptIOT)
import Apt.AptState (repoMap)
import Apt.MonadApt (MonadApt(getApt, putApt))
import Debian.Repo.Types.Repository (MonadRepoCache(..))
import System.Posix.Files (deviceID, fileID, FileStatus, modificationTime)
instance Ord FileStatus where
compare a b = compare (deviceID a, fileID a, modificationTime a) (deviceID b, fileID b, modificationTime b)
instance Eq FileStatus where
a == b = compare a b == EQ
instance (MonadIO m, Functor m, MonadCatchIO m) => MonadApt (AptIOT m) where
getApt = get
putApt = put
instance MonadApt m => MonadApt (ReaderT s m) where
getApt = lift getApt
putApt = lift . putApt
instance MonadApt m => MonadRepoCache m where
getRepoCache = getApt >>= return . repoMap
putRepoCache m = getApt >>= \ a -> putApt (a {repoMap = m})