{- | Copyright: 2006, Bjorn Bringert Copyright: 2009, Henning Thielemann -} module Network.MoHWS.Module.Description where import qualified Network.MoHWS.Module as Module import qualified Network.MoHWS.Configuration.Parser as ConfigParser import qualified Network.MoHWS.Server.Context as ServerContext import qualified Data.Accessor.Basic as Accessor data T body ext = Cons { name :: String, load :: ServerContext.T ext -> IO (Module.T body), configParser :: ConfigParser.T () ext, setDefltConfig :: ext -> ext } empty :: T body ext empty = Cons { name = "", load = const $ return Module.empty, configParser = fail "no parser available", -- identity element for 'Parsec.choice' setDefltConfig = id } lift :: Accessor.T fullExt partExt -> T body partExt -> T body fullExt lift acc desc = Cons { name = name desc, load = load desc . fmap (Accessor.get acc), configParser = ConfigParser.lift acc $ configParser desc, setDefltConfig = Accessor.modify acc (setDefltConfig desc) }