{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FunctionalDependencies #-}
module Drasil.GProc.InterfaceProc (
Program, GSProgram, File, Module,
ProcProg, ProgramSym(..), FileSym(..), ModuleSym(..)
) where
import Drasil.Shared.InterfaceCommon (Label, SharedProg, MethodSym(..))
import Drasil.Shared.State (GS, FS, MS)
import Drasil.Shared.AST (FileData, ModData, ProgData)
class (SharedProg r vis smt md, ProgramSym r vis smt md prg)
=> ProcProg r vis smt md prg
type Program = ProgData
type GSProgram a prg = GS (a prg)
class (FileSym r vis smt md) => ProgramSym r vis smt md prg | r -> prg where
prog :: Label -> Label -> [FS (r File)] -> GSProgram r prg
type File = FileData
class (ModuleSym r vis smt md) => FileSym r vis smt md where
fileDoc :: FS (r Module) -> FS (r File)
docMod :: String -> String -> [String] -> String -> FS (r File) -> FS (r File)
type Module = ModData
class (MethodSym r vis smt md) => ModuleSym r vis smt md where
buildModule :: Label -> [Label] -> [MS (r md)] -> FS (r Module)