ariadne-0.1.2.2: Ariadne/ModuleDB/Types.hs
{-# LANGUAGE TemplateHaskell #-}
module Ariadne.ModuleDB.Types where
import qualified Ariadne.SrcMap as SrcMap
import Ariadne.Types
import Control.Concurrent
import Control.Concurrent.STM
import Data.Monoid
import qualified Data.Set as Set
import qualified Data.Map as Map
import Data.Lens.Template
import Language.Haskell.Exts.Annotated hiding (parse)
data Request
= Include FilePath
| Update FilePath
type Callback = IO ()
-- ModuleDB's moduleData should only be modified in the ModuleDB's own
-- thread. Outside, it can only be read. This is inforced by the module
-- system.
data ModuleDB = ModuleDB
{ requestChan :: Chan (Request, Callback)
, storage :: TVar Storage
}
data Storage = Storage
{ _watchedFiles :: Set.Set FilePath
, _moduleSources :: Map.Map FilePath (Module SrcSpan)
, _moduleSrcMaps :: Map.Map FilePath (SrcMap.SrcMap Origin)
}
emptyStorage = Storage mempty mempty mempty
makeLenses [''Storage]