{-# LANGUAGE
ConstraintKinds
, FlexibleContexts
#-}
module Application.Types where
import LText.Expr (Expr)
import Control.Monad.Reader (MonadReader, ReaderT (runReaderT))
import Control.Monad.Catch (MonadThrow)
import Control.Monad.IO.Class (MonadIO)
import Data.HashSet (HashSet)
data Env = Env
{ Env -> Expr
topLevelExpr :: Expr
, Env -> Bool
isTypeQuery :: Bool
, Env -> HashSet FilePath
rawTerms :: HashSet FilePath
, Env -> Maybe (FilePath, FilePath)
delims :: Maybe (String, String)
} deriving (Env -> Env -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Env -> Env -> Bool
$c/= :: Env -> Env -> Bool
== :: Env -> Env -> Bool
$c== :: Env -> Env -> Bool
Eq, Int -> Env -> ShowS
[Env] -> ShowS
Env -> FilePath
forall a.
(Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a
showList :: [Env] -> ShowS
$cshowList :: [Env] -> ShowS
show :: Env -> FilePath
$cshow :: Env -> FilePath
showsPrec :: Int -> Env -> ShowS
$cshowsPrec :: Int -> Env -> ShowS
Show)
type MonadApp m =
( MonadIO m
, MonadReader Env m
, MonadThrow m
)
type AppM = ReaderT Env IO
runAppM :: Env -> AppM a -> IO a
runAppM :: forall a. Env -> AppM a -> IO a
runAppM = forall a b c. (a -> b -> c) -> b -> a -> c
flip forall r (m :: * -> *) a. ReaderT r m a -> r -> m a
runReaderT