aboutsummaryrefslogtreecommitdiff
path: root/src/Language/SimpleShell/Parser/Module.hs
blob: 01a8975df8e33bc8e27c789e01cd4bdd0003f078 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
module Language.SimpleShell.Parser.Module
  ( moduleP0
  , modulePF
  )
where


import Language.SimpleShell.AST.Module (Module)
import Language.SimpleShell.AST.Name (FunName, ProcedureName)
import Language.SimpleShell.AST.SimpleType (FunSig, ProcedureSig)
import Language.SimpleShell.Parser.Root (RootParser)

import Control.Monad.Reader (ReaderT, runReaderT)
import Control.Monad.State (StateT, execStateT)
import Data.Map (Map)
import qualified Data.Map as Map (empty)


type ModuleParser0 = StateT ModuleContext RootParser

type ModuleParser = ReaderT ModuleContext RootParser

moduleP0 :: RootParser ModuleContext
moduleP0 = execStateT moduleMP0 initModuleContext

modulePF :: ModuleContext -> RootParser Module
modulePF = runReaderT moduleMP


data ModuleContext
  = ModuleContext
      (Map FunName FunSig)
      (Map ProcedureName ProcedureSig)

initModuleContext :: ModuleContext
initModuleContext = ModuleContext Map.empty Map.empty


moduleMP0 :: ModuleParser0 ()
moduleMP0 = undefined


moduleMP :: ModuleParser Module
moduleMP = undefined