module Helium.Main.PhaseTypingStrategies(phaseTypingStrategies) where
import Helium.Main.CompileUtils
import Lvm.Core.Expr (CoreDecl)
import Helium.StaticAnalysis.Directives.TS_Compile (readTypingStrategiesFromFile)
import qualified Data.Map as M
import Helium.Syntax.UHA_Syntax (Name)
import Top.Types (TpScheme)
phaseTypingStrategies :: String -> ImportEnvironment -> [(Name, TpScheme)] -> [Option] ->
IO (ImportEnvironment, [CoreDecl])
phaseTypingStrategies fullName combinedEnv typeSignatures options
| DisableDirectives `elem` options =
return (removeTypingStrategies combinedEnv, [])
| otherwise =
let (path, baseName, _) = splitFilePath fullName
fullNameNoExt = combinePathAndFile path baseName
in do enterNewPhase "Type inference directives" options
(theTypingStrategies, typingStrategiesDecls) <-
readTypingStrategiesFromFile options (fullNameNoExt ++ ".type")
(addToTypeEnvironment (M.fromList typeSignatures) combinedEnv)
return
( addTypingStrategies theTypingStrategies combinedEnv
, typingStrategiesDecls
)