agda-unused-0.1.0: src/Agda/Unused/Monad/Reader.hs
{- |
Module: Agda.Unused.Monad.Reader
A reader monad for determining unused code.
-}
module Agda.Unused.Monad.Reader
( -- * Definition
Environment(..)
-- * Ask
, askSkip
, askLocal
, askRoot
-- * Local
, localSkip
) where
import Control.Monad.Reader
(MonadReader, ask, local)
-- | An environment type for use in a reader monad.
data Environment
= Environment
{ environmentSkip
:: !Bool
-- ^ Whether to skip all names.
, environmentLocal
:: !Bool
-- ^ Whether to skip public names.
, environmentRoot
:: !FilePath
-- ^ The project root path.
} deriving Show
-- | Ask whether to skip checking names.
askSkip
:: MonadReader Environment m
=> m Bool
askSkip
= environmentSkip <$> ask
-- | Ask whether to skip checking public names.
askLocal
:: MonadReader Environment m
=> m Bool
askLocal
= environmentLocal <$> ask
-- | Ask for the project root path.
askRoot
:: MonadReader Environment m
=> m FilePath
askRoot
= environmentRoot <$> ask
-- | Skip checking names in a local computation.
localSkip
:: MonadReader Environment m
=> m a
-> m a
localSkip
= local (\e -> e {environmentSkip = True})