module Language.PureScript.Interactive.Types where
import Prelude.Compat
import qualified Language.PureScript as P
data PSCiConfig = PSCiConfig
{ psciFileGlobs :: [String]
, psciEnvironment :: P.Environment
} deriving Show
data PSCiState = PSCiState
{ psciImportedModules :: [ImportedModule]
, psciLetBindings :: [P.Declaration]
, psciLoadedExterns :: [(P.Module, P.ExternsFile)]
} deriving Show
initialPSCiState :: PSCiState
initialPSCiState = PSCiState [] [] []
type ImportedModule = (P.ModuleName, P.ImportDeclarationType, Maybe P.ModuleName)
psciImportedModuleNames :: PSCiState -> [P.ModuleName]
psciImportedModuleNames PSCiState{psciImportedModules = is} =
map (\(mn, _, _) -> mn) is
allImportsOf :: P.Module -> PSCiState -> [ImportedModule]
allImportsOf m PSCiState{psciImportedModules = is} =
filter isImportOfThis is
where
name = P.getModuleName m
isImportOfThis (name', _, _) = name == name'
updateImportedModules :: ([ImportedModule] -> [ImportedModule]) -> PSCiState -> PSCiState
updateImportedModules f st = st { psciImportedModules = f (psciImportedModules st) }
updateLoadedExterns :: ([(P.Module, P.ExternsFile)] -> [(P.Module, P.ExternsFile)]) -> PSCiState -> PSCiState
updateLoadedExterns f st = st { psciLoadedExterns = f (psciLoadedExterns st) }
updateLets :: ([P.Declaration] -> [P.Declaration]) -> PSCiState -> PSCiState
updateLets f st = st { psciLetBindings = f (psciLetBindings st) }
data Command
= Expression P.Expr
| ShowHelp
| Import ImportedModule
| BrowseModule P.ModuleName
| QuitPSCi
| ReloadState
| ClearState
| Decls [P.Declaration]
| TypeOf P.Expr
| KindOf P.Type
| ShowInfo ReplQuery
| PasteLines
| CompleteStr String
deriving Show
data ReplQuery
= QueryLoaded
| QueryImport
deriving (Eq, Show)
replQueries :: [ReplQuery]
replQueries = [QueryLoaded, QueryImport]
replQueryStrings :: [String]
replQueryStrings = map showReplQuery replQueries
showReplQuery :: ReplQuery -> String
showReplQuery QueryLoaded = "loaded"
showReplQuery QueryImport = "import"
parseReplQuery :: String -> Maybe ReplQuery
parseReplQuery "loaded" = Just QueryLoaded
parseReplQuery "import" = Just QueryImport
parseReplQuery _ = Nothing
data Directive
= Help
| Quit
| Reload
| Clear
| Browse
| Type
| Kind
| Show
| Paste
| Complete
deriving (Eq, Show)