Agda-2.6.2: src/full/Agda/Interaction/Options/HasOptions.hs
module Agda.Interaction.Options.HasOptions
( HasOptions (pragmaOptions, commandLineOptions)
) where
import Control.Monad.Except (ExceptT)
import Control.Monad.Reader (ReaderT)
import Control.Monad.State (StateT)
import Control.Monad.Trans ( MonadTrans, lift )
import Control.Monad.Trans.Identity (IdentityT)
import Control.Monad.Trans.Maybe (MaybeT)
import Control.Monad.Writer (WriterT)
import Agda.Interaction.Options.Base (PragmaOptions, CommandLineOptions)
import Agda.Utils.Update (ChangeT)
import Agda.Utils.ListT (ListT)
class (Functor m, Applicative m, Monad m) => HasOptions m where
-- | Returns the pragma options which are currently in effect.
pragmaOptions :: m PragmaOptions
-- | Returns the command line options which are currently in effect.
commandLineOptions :: m CommandLineOptions
default pragmaOptions :: (HasOptions n, MonadTrans t, m ~ t n) => m PragmaOptions
pragmaOptions = lift pragmaOptions
default commandLineOptions :: (HasOptions n, MonadTrans t, m ~ t n) => m CommandLineOptions
commandLineOptions = lift commandLineOptions
-- HasOptions lifts through monad transformers
-- (see default signatures in the HasOptions class).
instance HasOptions m => HasOptions (ChangeT m)
instance HasOptions m => HasOptions (ExceptT e m)
instance HasOptions m => HasOptions (IdentityT m)
instance HasOptions m => HasOptions (ListT m)
instance HasOptions m => HasOptions (MaybeT m)
instance HasOptions m => HasOptions (ReaderT r m)
instance HasOptions m => HasOptions (StateT s m)
instance (HasOptions m, Monoid w) => HasOptions (WriterT w m)