@@ -32,9 +32,7 @@ import qualified Control.Monad.State.Strict as State
3232import qualified Data.Char as Char
3333import Data.Foldable (foldrM)
3434import qualified Data.Map.Strict as Map
35−import Data.Monoid ((<>))
3635import qualified Data.Text as Text
37−import Data.Text (Text)
3836import Data.Word (Word32)
3937
4038import qualified AST.Canonical as Can
@@ -93,7 +91,7 @@ data Content
9391 | RigidSuper SuperType N.Name
9492 | Structure FlatType
9593 | Alias ModuleName.Canonical N.Name [(N.Name,Variable)] Variable
96− | Error Text
94+ | Error N.Name
9795
9896
9997data SuperType
@@ -287,16 +285,16 @@ nameToRigid name =
287285
288286toSuper :: N.Name -> Maybe SuperType
289287toSuper name =
290− if Text.isPrefixOf "number" name then
288+ if N.startsWith "number" name then
291289 Just Number
292290
293− else if Text.isPrefixOf "comparable" name then
291+ else if N.startsWith "comparable" name then
294292 Just Comparable
295293
296− else if Text.isPrefixOf "appendable" name then
294+ else if N.startsWith "appendable" name then
297295 Just Appendable
298296
299− else if Text.isPrefixOf "compappend" name then
297+ else if N.startsWith "compappend" name then
300298 Just CompAppend
301299
302300 else
@@ -502,7 +500,7 @@ getFreshSuperHelp :: N.Name -> Int -> TakenNames -> (N.Name, Int)
502500getFreshSuperHelp name index taken =
503501 let
504502 newName =
505− if index <= 0 then name else name <> Text.pack (show index)
503+ if index <= 0 then name else N.addIndex name index
506504 in
507505 if Map.member newName taken then
508506 getFreshSuperHelp name (index + 1) taken
@@ -586,10 +584,8 @@ addName index givenName var makeContent takenNames =
586584 indexedName =
587585 if index <= 0 then
588586 givenName
589− else if Char.isDigit (Text.last givenName) then
590− givenName <> Text.pack ('_' : show index)
591587 else
592− givenName <> Text.pack (show index)
588+ N.addSafeIndex givenName index
593589 in
594590 case Map.lookup indexedName takenNames of
595591 Nothing ->