---------------------------------------------------------------- -- -- | Compilation -- Monad and combinators for quickly assembling simple -- compilers. -- -- @Control\/Compilation\/Module.hs@ -- -- State extension class and combinators for implementations -- of a state that support module name specification. -- ---------------------------------------------------------------- -- {-# LANGUAGE TypeSynonymInstances #-} module Control.Compilation.Module where import Control.Compilation ---------------------------------------------------------------- -- | Type synonyms and class memberships. type ModuleName = String type StateExtensionModule = ModuleName ---------------------------------------------------------------- -- | State extension class definition, including combinators. class StateExtension a => HasModule a where project :: a -> StateExtensionModule inject :: StateExtensionModule -> a -> a setModule :: String -> Compilation a () setModule m = do s <- get set $ inject m s getModule :: Compilation a String getModule = do s <- get return $ project s --eof