shithub: MicroHs

Download patch

ref: 8f1795d9bb6bd984b346f70d23ee408010f5dd1d
parent: 4b762b6716de3f878c33883f47cfc3f1afb7f2cf
author: Lennart Augustsson <lennart@augustsson.net>
date: Sat Aug 31 09:02:22 EDT 2024

Use Text in Ident

--- a/src/MicroHs/Ident.hs
+++ b/src/MicroHs/Ident.hs
@@ -17,6 +17,7 @@
   showSLoc,
   ) where
 import Data.Char
+import Data.Text(Text, pack, unpack, append)
 import Text.PrettyPrint.HughesPJLite
 import GHC.Stack
 import MicroHs.List(dropEnd)
@@ -30,7 +31,7 @@
 instance Show SLoc where
   show (SLoc f l c) = show f ++ "," ++ show l ++ ":" ++ show c
 
-data Ident = Ident SLoc String
+data Ident = Ident SLoc Text
   --deriving (Show)
 
 instance Eq Ident where
@@ -50,32 +51,32 @@
 noSLoc = SLoc "" 0 0
 
 mkIdent :: String -> Ident
-mkIdent = Ident noSLoc
+mkIdent = mkIdentSLoc noSLoc
 
 mkIdentSLoc :: SLoc -> String -> Ident
-mkIdentSLoc = Ident
+mkIdentSLoc l = Ident l . pack
 
 unIdent :: Ident -> String
-unIdent (Ident _ s) = s
+unIdent (Ident _ s) = unpack s
 
 setSLocIdent :: SLoc -> Ident -> Ident
 setSLocIdent l (Ident _ s) = Ident l s
 
 showIdent :: Ident -> String
-showIdent (Ident _ i) = i
+showIdent (Ident _ i) = unpack i
 
 ppIdent :: Ident -> Doc
-ppIdent (Ident _ i) = text i
+ppIdent (Ident _ i) = text $ unpack i
 
 isIdent :: String -> Ident -> Bool
-isIdent s (Ident _ i) = s == i
+isIdent s (Ident _ i) = pack s == i
 
 qualIdent :: HasCallStack =>
              Ident -> Ident -> Ident
-qualIdent (Ident _ qi) (Ident loc i) = Ident loc (qi ++ "." ++ i)
+qualIdent (Ident _ qi) (Ident loc i) = Ident loc (qi `append` "." `append` i)
 
 addIdentSuffix :: Ident -> String -> Ident
-addIdentSuffix (Ident loc i) s = Ident loc (i ++ s)
+addIdentSuffix (Ident loc i) s = Ident loc (i `append` pack s)
 
 unQualString :: HasCallStack =>
                 String -> String
@@ -90,15 +91,16 @@
     s
 
 unQualIdent :: Ident -> Ident
-unQualIdent (Ident l s) = Ident l (unQualString s)
+unQualIdent (Ident l s) = Ident l (pack $ unQualString $ unpack s)
 
 qualOf :: Ident -> Ident
-qualOf (Ident loc s) = Ident loc (dropEnd (length (unQualString s) + 1) s)
+qualOf (Ident loc s) = Ident loc (pack $ dropEnd (length (unQualString s') + 1) s')
+  where s' = unpack s
 
 isConIdent :: Ident -> Bool
 isConIdent (Ident _ i) =
   let
-    c = head i
+    c = head (unpack i)
   in isUpper c || c == ':' || c == ',' || i == "[]"  || i == "()"
 
 isOperChar :: Char -> Bool
@@ -117,8 +119,7 @@
 dummyIdent = mkIdent "_"
 
 isDummyIdent :: Ident -> Bool
-isDummyIdent (Ident _ "_") = True
-isDummyIdent _ = False
+isDummyIdent (Ident _ s) = s == pack "_"
 
 showSLoc :: SLoc -> String
 showSLoc (SLoc fn l c) =
--