43 lines
1.3 KiB
Haskell
43 lines
1.3 KiB
Haskell
module Check
|
|
( module Check.Core
|
|
, module Check.IO
|
|
, checkFile
|
|
, checkFileWithStore
|
|
, checkSource
|
|
) where
|
|
|
|
import Check.Core
|
|
import Check.IO
|
|
import ContentStore (ObjectRef, StorePath, getViewType)
|
|
import Eval (evalTricu)
|
|
import FileEval (LoadedSource(..), defaultStorePath, evaluateFile, evaluateFileWithStore, loadFileWithStore)
|
|
import Research (Env, ViewType)
|
|
|
|
import qualified Data.Map as Map
|
|
|
|
import System.IO.Unsafe (unsafePerformIO)
|
|
|
|
checkFile :: FilePath -> IO String
|
|
checkFile path = do
|
|
store <- defaultStorePath
|
|
checkFileWithStore store path
|
|
|
|
checkFileWithStore :: StorePath -> FilePath -> IO String
|
|
checkFileWithStore store path = do
|
|
loaded <- loadFileWithStore store path
|
|
viewEnv <- evaluateFileWithStore (Just store) "./lib/view.tri"
|
|
let baseEnv = Map.union viewEnv (loadedImports loaded)
|
|
checkerEnv = evalTricu baseEnv (loadedAst loaded)
|
|
imports <- importedViewsFromResolvedModulesEither (loadImportedView store) (loadedModules loaded)
|
|
checkProgramWithEnvAndImportedViews checkerEnv imports (loadedAst loaded)
|
|
|
|
viewCheckerEnv :: Env
|
|
viewCheckerEnv = unsafePerformIO (evaluateFile "./lib/view.tri")
|
|
{-# NOINLINE viewCheckerEnv #-}
|
|
|
|
checkSource :: String -> IO String
|
|
checkSource = checkSourceWithEnv viewCheckerEnv
|
|
|
|
loadImportedView :: StorePath -> ObjectRef -> IO (Either String ViewType)
|
|
loadImportedView = getViewType
|