@@ -32,9 +32,7 @@ import qualified Control.Monad.State.Strict as State
32import qualified Data.Char as Char
32import qualified Data.Char as Char
33import Data.Foldable (foldrM)
33import Data.Foldable (foldrM)
34import qualified Data.Map.Strict as Map
34import qualified Data.Map.Strict as Map
35−import Data.Monoid ((<>))
36import qualified Data.Text as Text
35import qualified Data.Text as Text
37−import Data.Text (Text)
38import Data.Word (Word32)
36import Data.Word (Word32)
40import qualified AST.Canonical as Can
38import qualified AST.Canonical as Can
@@ -93,7 +91,7 @@ data Content
93 | RigidSuper SuperType N.Name
91 | RigidSuper SuperType N.Name
94 | Structure FlatType
92 | Structure FlatType
95 | Alias ModuleName.Canonical N.Name [(N.Name,Variable)] Variable
93 | Alias ModuleName.Canonical N.Name [(N.Name,Variable)] Variable
96− | Error Text
94+ | Error N.Name
99data SuperType
97data SuperType
@@ -287,16 +285,16 @@ nameToRigid name =
288toSuper :: N.Name -> Maybe SuperType
286toSuper :: N.Name -> Maybe SuperType
289toSuper name =
287toSuper name =
290− if Text.isPrefixOf "number" name then
288+ if N.startsWith "number" name then
291 Just Number
289 Just Number
293− else if Text.isPrefixOf "comparable" name then
291+ else if N.startsWith "comparable" name then
294 Just Comparable
292 Just Comparable
296− else if Text.isPrefixOf "appendable" name then
294+ else if N.startsWith "appendable" name then
297 Just Appendable
295 Just Appendable
299− else if Text.isPrefixOf "compappend" name then
297+ else if N.startsWith "compappend" name then
300 Just CompAppend
298 Just CompAppend
@@ -502,7 +500,7 @@ getFreshSuperHelp :: N.Name -> Int -> TakenNames -> (N.Name, Int)
502getFreshSuperHelp name index taken =
500getFreshSuperHelp name index taken =
504 newName =
502 newName =
505− if index <= 0 then name else name <> Text.pack (show index)
503+ if index <= 0 then name else N.addIndex name index
507 if Map.member newName taken then
505 if Map.member newName taken then
508 getFreshSuperHelp name (index + 1) taken
506 getFreshSuperHelp name (index + 1) taken
@@ -586,10 +584,8 @@ addName index givenName var makeContent takenNames =
586 indexedName =
584 indexedName =
587 if index <= 0 then
585 if index <= 0 then
588 givenName
586 givenName
589− else if Char.isDigit (Text.last givenName) then
590− givenName <> Text.pack ('_' : show index)
592− givenName <> Text.pack (show index)
588+ N.addSafeIndex givenName index
594 case Map.lookup indexedName takenNames of
590 case Map.lookup indexedName takenNames of
595 Nothing ->
591 Nothing ->