@@ -33,12 +33,12 @@ import Control.Monad.State.Strict (StateT, liftIO)
3333import qualified Control.Monad.State.Strict as State
3434import Data.Foldable (foldrM)
3535import qualified Data.Map.Strict as Map
36+import qualified Data.Name as Name
3637import Data.Word (Word32)
3738
3839import qualified AST.Canonical as Can
3940import qualified AST.Module.Name as ModuleName
4041import qualified AST.Utils.Type as Type
41−import qualified Elm.Name as N
4242import qualified Reporting.Annotation as A
4343import qualified Reporting.Error.Type as E
4444import qualified Reporting.Region as R
@@ -54,14 +54,14 @@ data Constraint
5454 = CTrue
5555 | CSaveTheEnvironment
5656 | CEqual R.Region E.Category Type (E.Expected Type)
57− | CLocal R.Region N.Name (E.Expected Type)
58− | CForeign R.Region N.Name Can.Annotation (E.Expected Type)
57+ | CLocal R.Region Name.Name (E.Expected Type)
58+ | CForeign R.Region Name.Name Can.Annotation (E.Expected Type)
5959 | CPattern R.Region E.PCategory Type (E.PExpected Type)
6060 | CAnd [Constraint]
6161 | CLet
6262 { _rigidVars :: [Variable]
6363 , _flexVars :: [Variable]
64− , _header :: Map.Map N.Name (A.Located Type)
64+ , _header :: Map.Map Name.Name (A.Located Type)
6565 , _headerCon :: Constraint
6666 , _bodyCon :: Constraint
6767 }
@@ -81,22 +81,22 @@ type Variable =
8181
8282
8383data FlatType
84− = App1 ModuleName.Canonical N.Name [Variable]
84+ = App1 ModuleName.Canonical Name.Name [Variable]
8585 | Fun1 Variable Variable
8686 | EmptyRecord1
87− | Record1 (Map.Map N.Name Variable) Variable
87+ | Record1 (Map.Map Name.Name Variable) Variable
8888 | Unit1
8989 | Tuple1 Variable Variable (Maybe Variable)
9090
9191
9292data Type
93− = PlaceHolder N.Name
94− | AliasN ModuleName.Canonical N.Name [(N.Name, Type)] Type
93+ = PlaceHolder Name.Name
94+ | AliasN ModuleName.Canonical Name.Name [(Name.Name, Type)] Type
9595 | VarN Variable
96− | AppN ModuleName.Canonical N.Name [Type]
96+ | AppN ModuleName.Canonical Name.Name [Type]
9797 | FunN Type Type
9898 | EmptyRecordN
99− | RecordN (Map.Map N.Name Type) Type
99+ | RecordN (Map.Map Name.Name Type) Type
100100 | UnitN
101101 | TupleN Type Type (Maybe Type)
102102
@@ -115,12 +115,12 @@ data Descriptor =
115115
116116
117117data Content
118− = FlexVar (Maybe N.Name)
119− | FlexSuper SuperType (Maybe N.Name)
120− | RigidVar N.Name
121− | RigidSuper SuperType N.Name
118+ = FlexVar (Maybe Name.Name)
119+ | FlexSuper SuperType (Maybe Name.Name)
120+ | RigidVar Name.Name
121+ | RigidSuper SuperType Name.Name
122122 | Structure FlatType
123− | Alias ModuleName.Canonical N.Name [(N.Name,Variable)] Variable
123+ | Alias ModuleName.Canonical Name.Name [(Name.Name,Variable)] Variable
124124 | Error
125125
126126
@@ -301,30 +301,30 @@ unnamedFlexSuper super =
301301-- MAKE NAMED VARIABLES
302302
303303
304−nameToFlex :: N.Name -> IO Variable
304+nameToFlex :: Name.Name -> IO Variable
305305nameToFlex name =
306306 UF.fresh $ makeDescriptor $
307307 maybe FlexVar FlexSuper (toSuper name) (Just name)
308308
309309
310−nameToRigid :: N.Name -> IO Variable
310+nameToRigid :: Name.Name -> IO Variable
311311nameToRigid name =
312312 UF.fresh $ makeDescriptor $
313313 maybe RigidVar RigidSuper (toSuper name) name
314314
315315
316−toSuper :: N.Name -> Maybe SuperType
316+toSuper :: Name.Name -> Maybe SuperType
317317toSuper name =
318− if N.startsWith "number" name then
318+ if Name.isNumberType name then
319319 Just Number
320320
321− else if N.startsWith "comparable" name then
321+ else if Name.isComparableType name then
322322 Just Comparable
323323
324− else if N.startsWith "appendable" name then
324+ else if Name.isAppendableType name then
325325 Just Appendable
326326
327− else if N.startsWith "compappend" name then
327+ else if Name.isCompappendType name then
328328 Just CompAppend
329329
330330 else
@@ -557,7 +557,7 @@ termToErrorType term =
557557
558558data NameState =
559559 NameState
560− { _taken :: Map.Map N.Name ()
560+ { _taken :: Map.Map Name.Name ()
561561 , _normals :: Int
562562 , _numbers :: Int
563563 , _comparables :: Int
@@ -566,7 +566,7 @@ data NameState =
566566 }
567567
568568
569−makeNameState :: Map.Map N.Name Variable -> NameState
569+makeNameState :: Map.Map Name.Name Variable -> NameState
570570makeNameState taken =
571571 NameState (Map.map (const ()) taken) 0 0 0 0 0
572572
@@ -575,7 +575,7 @@ makeNameState taken =
575575-- FRESH VAR NAMES
576576
577577
578−getFreshVarName :: (Monad m) => StateT NameState m N.Name
578+getFreshVarName :: (Monad m) => StateT NameState m Name.Name
579579getFreshVarName =
580580 do index <- State.gets _normals
581581 taken <- State.gets _taken
@@ -584,26 +584,23 @@ getFreshVarName =
584584 return name
585585
586586
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 ())
588588getFreshVarNameHelp index taken =
589589 let
590− (postfix, letter) =
591− quotRem index 26
592−
593− chr = N.fromLetter letter
594− name = if postfix <= 0 then chr else N.addIndex chr postfix
590+ name =
591+ Name.fromTypeVariableScheme index
595592 in
596− if Map.member name taken then
597− getFreshVarNameHelp (index + 1) taken
598− else
599− ( name, index + 1, Map.insert name () taken )
593+ if Map.member name taken then
594+ getFreshVarNameHelp (index + 1) taken
595+ else
596+ ( name, index + 1, Map.insert name () taken )
600597
601598
602599
603600-- FRESH SUPER NAMES
604601
605602
606−getFreshSuperName :: (Monad m) => SuperType -> StateT NameState m N.Name
603+getFreshSuperName :: (Monad m) => SuperType -> StateT NameState m Name.Name
607604getFreshSuperName super =
608605 case super of
609606 Number ->
@@ -619,7 +616,7 @@ getFreshSuperName super =
619616 getFreshSuper "compappend" _compAppends (\index state -> state { _compAppends = index })
620617
621618
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
623620getFreshSuper prefix getter setter =
624621 do index <- State.gets getter
625622 taken <- State.gets _taken
@@ -628,11 +625,11 @@ getFreshSuper prefix getter setter =
628625 return name
629626
630627
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 ())
632629getFreshSuperHelp prefix index taken =
633630 let
634631 name =
635− if index <= 0 then prefix else N.addIndex prefix index
632+ Name.fromTypeVariable prefix index
636633 in
637634 if Map.member name taken then
638635 getFreshSuperHelp prefix (index + 1) taken
@@ -645,7 +642,7 @@ getFreshSuperHelp prefix index taken =
645642-- GET ALL VARIABLE NAMES
646643
647644
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)
649646getVarNames var takenNames =
650647 do (Descriptor content rank mark copy) <- UF.get var
651648 if mark == getVarNamesMark
@@ -710,14 +707,11 @@ getVarNames var takenNames =
710707-- REGISTER NAME / RENAME DUPLICATES
711708
712709
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)
714711addName index givenName var makeContent takenNames =
715712 let
716713 indexedName =
717− if index <= 0 then
718− givenName
719− else
720− N.addSafeIndex givenName index
714+ Name.fromTypeVariable givenName index
721715 in
722716 case Map.lookup indexedName takenNames of
723717 Nothing ->