helium-1.8: src/Helium/StaticAnalysis/Inferencers/TypeInferencing.ag
-----------------------------------------------------------------------------
-- |The Helium Compiler : Static Analysis
--
-- Maintainer : bastiaan@cs.uu.nl
-- Stability : experimental
-- Portability : unknown
--
-- Type inferencing.
--
-----------------------------------------------------------------------------
{
typeInferencing :: [Option] -> ImportEnvironment -> Module
-> (IO (), DictionaryEnvironment, TypeEnvironment, TypeErrors, Warnings)
typeInferencing options importEnv module_ =
let res = wrap_Module (sem_Module module_) Inh_Module {
importEnvironment_Inh_Module = importEnv,
options_Inh_Module = options }
debugIO = putStrLn (show $ logEntries_Syn_Module res)
in (debugIO, dictionaryEnvironment_Syn_Module res, toplevelTypes_Syn_Module res, typeErrors_Syn_Module res, warnings_Syn_Module res)
proximaTypeInferencing :: [Option] -> ImportEnvironment -> Module
-> (TypeErrors, Warnings, TypeEnvironment, [(Range, TpScheme)])
proximaTypeInferencing options importEnv module_ =
let res = wrap_Module (sem_Module module_) Inh_Module {
importEnvironment_Inh_Module = importEnv,
options_Inh_Module = options }
localTypeSchemes = typeSchemesInInfoTree (substitutionFromResult $ solveResult_Syn_Module res)
(qualifiersFromResult $ solveResult_Syn_Module res)
(infoTree_Syn_Module res)
in (typeErrors_Syn_Module res, warnings_Syn_Module res, toplevelTypes_Syn_Module res, localTypeSchemes)
}
-------------------------------------------------------------------------------
-- Attributes for type inferencing
ATTR Module
[ importEnvironment : ImportEnvironment
options : {[Option]}
|
| assumptions : Assumptions
dictionaryEnvironment : DictionaryEnvironment
infoTree : InfoTree
logEntries : LogEntries
solveResult : {SolveResult ConstraintInfo}
toplevelTypes : TypeEnvironment
typeErrors : TypeErrors
warnings : Warnings
]
-------------------------------------------------------------------------------
-- Includes
INCLUDE "TypeInferenceRules.ag"
INCLUDE "TypeInferenceOverloading.ag"
INCLUDE "TypeInferenceCollect.ag"
INCLUDE "TypeInferenceInfo.ag"
INCLUDE "LocalInfo.ag"
INCLUDE "GlobalInfo.ag"
INCLUDE "HeliumPartialSyntax.ag"
INCLUDE "Scope.ag"
INCLUDE "UHA_Syntax.ag"
--- Type Inference Directives (may be turned off)
INCLUDE "TS_PatternMatching.ag"
-- SEM Module | Module lhs . solveResult = @solveResult { debugFromResult = debugFromResult @solveResult
-- ++ "Inference Strategies:"
-- } -- ++ [ ] @body.matchIO }
-- Pattern Match Warnings (may be turned off)
INCLUDE "PatternMatchWarnings.ag"
SEM Module
| Module lhs . warnings = @loc.warnings ++ @body.patternMatchWarnings
-------------------------------------------------------------------------------
-- Imports
imports {
-- types
import Top.Types
import Helium.StaticAnalysis.Miscellaneous.TypeConversion
-- error messages and warnings
import Helium.StaticAnalysis.Messages.Messages
import Helium.StaticAnalysis.Messages.TypeErrors
import Helium.StaticAnalysis.Messages.Warnings
import Helium.StaticAnalysis.Miscellaneous.ConstraintInfo
import Helium.StaticAnalysis.Miscellaneous.DoublyLinkedTree
import Helium.StaticAnalysis.Miscellaneous.UHA_Source
-- constraints and constraint trees
import Helium.StaticAnalysis.Miscellaneous.TypeConstraints
import Top.Ordering.Tree
-- constraint solving
import Helium.StaticAnalysis.Inferencers.SelectConstraintSolver (selectConstraintSolver)
import Top.Solver (SolveResult(..), LogEntries)
import Helium.StaticAnalysis.Heuristics.HeuristicsInfo (makeUnifier, skip_UHA_FB_RHS)
import Helium.StaticAnalysis.Inferencers.BindingGroupAnalysis
-- UHA syntax
import Helium.Syntax.UHA_Syntax
import Helium.Syntax.UHA_Range
-- other
import Helium.Utils.Utils (internalError, hole)
import Helium.ModuleSystem.ImportEnvironment hiding (setTypeSynonyms)
import Helium.ModuleSystem.DictionaryEnvironment
import Helium.Main.Args
-- standard
import qualified Data.Map as M
import Data.Maybe
}