@@ -33,12 +33,12 @@ import Control.Monad.State.Strict (StateT, liftIO)
33import qualified Control.Monad.State.Strict as State
33import qualified Control.Monad.State.Strict as State
34import Data.Foldable (foldrM)
34import Data.Foldable (foldrM)
35import qualified Data.Map.Strict as Map
35import qualified Data.Map.Strict as Map
36+import qualified Data.Name as Name
36import Data.Word (Word32)
37import Data.Word (Word32)
38import qualified AST.Canonical as Can
39import qualified AST.Canonical as Can
39import qualified AST.Module.Name as ModuleName
40import qualified AST.Module.Name as ModuleName
40import qualified AST.Utils.Type as Type
41import qualified AST.Utils.Type as Type
41−import qualified Elm.Name as N
42import qualified Reporting.Annotation as A
42import qualified Reporting.Annotation as A
43import qualified Reporting.Error.Type as E
43import qualified Reporting.Error.Type as E
44import qualified Reporting.Region as R
44import qualified Reporting.Region as R
@@ -54,14 +54,14 @@ data Constraint
55 | CSaveTheEnvironment
55 | CSaveTheEnvironment
56 | CEqual R.Region E.Category Type (E.Expected Type)
56 | CEqual R.Region E.Category Type (E.Expected Type)
57− | CLocal R.Region N.Name (E.Expected Type)
57+ | CLocal R.Region Name.Name (E.Expected Type)
58− | CForeign R.Region N.Name Can.Annotation (E.Expected Type)
58+ | CForeign R.Region Name.Name Can.Annotation (E.Expected Type)
59 | CPattern R.Region E.PCategory Type (E.PExpected Type)
59 | CPattern R.Region E.PCategory Type (E.PExpected Type)
60 | CAnd [Constraint]
60 | CAnd [Constraint]
62 { _rigidVars :: [Variable]
62 { _rigidVars :: [Variable]
63 , _flexVars :: [Variable]
63 , _flexVars :: [Variable]
64− , _header :: Map.Map N.Name (A.Located Type)
64+ , _header :: Map.Map Name.Name (A.Located Type)
65 , _headerCon :: Constraint
65 , _headerCon :: Constraint
66 , _bodyCon :: Constraint
66 , _bodyCon :: Constraint
@@ -81,22 +81,22 @@ type Variable =
83data FlatType
83data FlatType
84− = App1 ModuleName.Canonical N.Name [Variable]
84+ = App1 ModuleName.Canonical Name.Name [Variable]
85 | Fun1 Variable Variable
85 | Fun1 Variable Variable
86 | EmptyRecord1
86 | EmptyRecord1
87− | Record1 (Map.Map N.Name Variable) Variable
87+ | Record1 (Map.Map Name.Name Variable) Variable
89 | Tuple1 Variable Variable (Maybe Variable)
89 | Tuple1 Variable Variable (Maybe Variable)
93− = PlaceHolder N.Name
93+ = PlaceHolder Name.Name
94− | AliasN ModuleName.Canonical N.Name [(N.Name, Type)] Type
94+ | AliasN ModuleName.Canonical Name.Name [(Name.Name, Type)] Type
95 | VarN Variable
95 | VarN Variable
96− | AppN ModuleName.Canonical N.Name [Type]
96+ | AppN ModuleName.Canonical Name.Name [Type]
97 | FunN Type Type
97 | FunN Type Type
98 | EmptyRecordN
98 | EmptyRecordN
99− | RecordN (Map.Map N.Name Type) Type
99+ | RecordN (Map.Map Name.Name Type) Type
101 | TupleN Type Type (Maybe Type)
101 | TupleN Type Type (Maybe Type)
@@ -115,12 +115,12 @@ data Descriptor =
117data Content
117data Content
118− = FlexVar (Maybe N.Name)
118+ = FlexVar (Maybe Name.Name)
119− | FlexSuper SuperType (Maybe N.Name)
119+ | FlexSuper SuperType (Maybe Name.Name)
120− | RigidVar N.Name
120+ | RigidVar Name.Name
121− | RigidSuper SuperType N.Name
121+ | RigidSuper SuperType Name.Name
122 | Structure FlatType
122 | Structure FlatType
123− | Alias ModuleName.Canonical N.Name [(N.Name,Variable)] Variable
123+ | Alias ModuleName.Canonical Name.Name [(Name.Name,Variable)] Variable
@@ -301,30 +301,30 @@ unnamedFlexSuper super =
301-- MAKE NAMED VARIABLES
301-- MAKE NAMED VARIABLES
304−nameToFlex :: N.Name -> IO Variable
304+nameToFlex :: Name.Name -> IO Variable
305nameToFlex name =
305nameToFlex name =
306 UF.fresh $ makeDescriptor $
306 UF.fresh $ makeDescriptor $
307 maybe FlexVar FlexSuper (toSuper name) (Just name)
307 maybe FlexVar FlexSuper (toSuper name) (Just name)
310−nameToRigid :: N.Name -> IO Variable
310+nameToRigid :: Name.Name -> IO Variable
311nameToRigid name =
311nameToRigid name =
312 UF.fresh $ makeDescriptor $
312 UF.fresh $ makeDescriptor $
313 maybe RigidVar RigidSuper (toSuper name) name
313 maybe RigidVar RigidSuper (toSuper name) name
316−toSuper :: N.Name -> Maybe SuperType
316+toSuper :: Name.Name -> Maybe SuperType
317toSuper name =
317toSuper name =
318− if N.startsWith "number" name then
318+ if Name.isNumberType name then
319 Just Number
319 Just Number
321− else if N.startsWith "comparable" name then
321+ else if Name.isComparableType name then
322 Just Comparable
322 Just Comparable
324− else if N.startsWith "appendable" name then
324+ else if Name.isAppendableType name then
325 Just Appendable
325 Just Appendable
327− else if N.startsWith "compappend" name then
327+ else if Name.isCompappendType name then
328 Just CompAppend
328 Just CompAppend
@@ -557,7 +557,7 @@ termToErrorType term =
558data NameState =
558data NameState =
559 NameState
559 NameState
560− { _taken :: Map.Map N.Name ()
560+ { _taken :: Map.Map Name.Name ()
561 , _normals :: Int
561 , _normals :: Int
562 , _numbers :: Int
562 , _numbers :: Int
563 , _comparables :: Int
563 , _comparables :: Int
@@ -566,7 +566,7 @@ data NameState =
569−makeNameState :: Map.Map N.Name Variable -> NameState
569+makeNameState :: Map.Map Name.Name Variable -> NameState
570makeNameState taken =
570makeNameState taken =
571 NameState (Map.map (const ()) taken) 0 0 0 0 0
571 NameState (Map.map (const ()) taken) 0 0 0 0 0
@@ -575,7 +575,7 @@ makeNameState taken =
575-- FRESH VAR NAMES
575-- FRESH VAR NAMES
578−getFreshVarName :: (Monad m) => StateT NameState m N.Name
578+getFreshVarName :: (Monad m) => StateT NameState m Name.Name
579getFreshVarName =
579getFreshVarName =
580 do index <- State.gets _normals
580 do index <- State.gets _normals
581 taken <- State.gets _taken
581 taken <- State.gets _taken
@@ -584,26 +584,23 @@ getFreshVarName =
584 return name
584 return name
587−getFreshVarNameHelp :: Int -> Map.Map N.Name () -> (N.Name, Int, Map.Map N.Name ())
587+getFreshVarNameHelp :: Int -> Map.Map Name.Name () -> (Name.Name, Int, Map.Map Name.Name ())
588getFreshVarNameHelp index taken =
588getFreshVarNameHelp index taken =
590− (postfix, letter) =
590+ name =
591− quotRem index 26
591+ Name.fromTypeVariableScheme index
593− chr = N.fromLetter letter
594− name = if postfix <= 0 then chr else N.addIndex chr postfix
596− if Map.member name taken then
593+ if Map.member name taken then
597− getFreshVarNameHelp (index + 1) taken
594+ getFreshVarNameHelp (index + 1) taken
599− ( name, index + 1, Map.insert name () taken )
596+ ( name, index + 1, Map.insert name () taken )
603-- FRESH SUPER NAMES
600-- FRESH SUPER NAMES
606−getFreshSuperName :: (Monad m) => SuperType -> StateT NameState m N.Name
603+getFreshSuperName :: (Monad m) => SuperType -> StateT NameState m Name.Name
607getFreshSuperName super =
604getFreshSuperName super =
608 case super of
605 case super of
609 Number ->
606 Number ->
@@ -619,7 +616,7 @@ getFreshSuperName super =
619 getFreshSuper "compappend" _compAppends (\index state -> state { _compAppends = index })
616 getFreshSuper "compappend" _compAppends (\index state -> state { _compAppends = index })
622−getFreshSuper :: (Monad m) => N.Name -> (NameState -> Int) -> (Int -> NameState -> NameState) -> StateT NameState m N.Name
619+getFreshSuper :: (Monad m) => Name.Name -> (NameState -> Int) -> (Int -> NameState -> NameState) -> StateT NameState m Name.Name
623getFreshSuper prefix getter setter =
620getFreshSuper prefix getter setter =
624 do index <- State.gets getter
621 do index <- State.gets getter
625 taken <- State.gets _taken
622 taken <- State.gets _taken
@@ -628,11 +625,11 @@ getFreshSuper prefix getter setter =
628 return name
625 return name
631−getFreshSuperHelp :: N.Name -> Int -> Map.Map N.Name () -> (N.Name, Int, Map.Map N.Name ())
628+getFreshSuperHelp :: Name.Name -> Int -> Map.Map Name.Name () -> (Name.Name, Int, Map.Map Name.Name ())
632getFreshSuperHelp prefix index taken =
629getFreshSuperHelp prefix index taken =
635− if index <= 0 then prefix else N.addIndex prefix index
632+ Name.fromTypeVariable prefix index
637 if Map.member name taken then
634 if Map.member name taken then
638 getFreshSuperHelp prefix (index + 1) taken
635 getFreshSuperHelp prefix (index + 1) taken
@@ -645,7 +642,7 @@ getFreshSuperHelp prefix index taken =
645-- GET ALL VARIABLE NAMES
642-- GET ALL VARIABLE NAMES
648−getVarNames :: Variable -> Map.Map N.Name Variable -> IO (Map.Map N.Name Variable)
645+getVarNames :: Variable -> Map.Map Name.Name Variable -> IO (Map.Map Name.Name Variable)
649getVarNames var takenNames =
646getVarNames var takenNames =
650 do (Descriptor content rank mark copy) <- UF.get var
647 do (Descriptor content rank mark copy) <- UF.get var
651 if mark == getVarNamesMark
648 if mark == getVarNamesMark
@@ -710,14 +707,11 @@ getVarNames var takenNames =
710-- REGISTER NAME / RENAME DUPLICATES
707-- REGISTER NAME / RENAME DUPLICATES
713−addName :: Int -> N.Name -> Variable -> (N.Name -> Content) -> Map.Map N.Name Variable -> IO (Map.Map N.Name Variable)
710+addName :: Int -> Name.Name -> Variable -> (Name.Name -> Content) -> Map.Map Name.Name Variable -> IO (Map.Map Name.Name Variable)
714addName index givenName var makeContent takenNames =
711addName index givenName var makeContent takenNames =
716 indexedName =
713 indexedName =
720− N.addSafeIndex givenName index
714+ Name.fromTypeVariable givenName index
722 case Map.lookup indexedName takenNames of
716 case Map.lookup indexedName takenNames of
723 Nothing ->
717 Nothing ->