compilation-0.0.0.3: Control/Compilation/Module.hs
----------------------------------------------------------------
--
-- | 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