[speed up parsing/lexing by using Name's rather than Strings
John Meacham <john@repetae.net>**20120130112230
 Ignore-this: cc38297046f0991709d63f4780f1665
] hunk ./src/FrontEnd/HsParser.y 952
-      : varid                 {  $1 }
-      | QVARID                { toName UnknownType $1 }
+      : varid                 { $1 }
+      | QVARID                { $1 }
hunk ./src/FrontEnd/HsParser.y 956
-      : VARID                 { toUnqualName $1 }
+      : VARID                 { $1 }
hunk ./src/FrontEnd/HsParser.y 967
-      : conid                 {  $1 }
-      | QCONID                { toName UnknownType $1  }
+      : conid                 { $1 }
+      | QCONID                { $1 }
hunk ./src/FrontEnd/HsParser.y 971
-      : CONID                 { toUnqualName $1 }
+      : CONID                 { $1 }
hunk ./src/FrontEnd/HsParser.y 974
-      : consym                {  $1 }
-      | QCONSYM               { toName UnknownType $1 }
+      : consym                { $1 }
+      | QCONSYM               { $1 }
hunk ./src/FrontEnd/HsParser.y 978
-      : CONSYM                { toUnqualName $1 }
+      : CONSYM                { $1 }
hunk ./src/FrontEnd/HsParser.y 989
-      : VARSYM                { toUnqualName $1 }
+      : VARSYM                { $1 }
hunk ./src/FrontEnd/HsParser.y 1000
-      : VARSYM                { toUnqualName $1 }
+      : VARSYM                { $1 }
hunk ./src/FrontEnd/HsParser.y 1007
-      : QVARSYM               { toName UnknownType $1 }
+      : QVARSYM               { $1 }
hunk ./src/FrontEnd/HsParser.y 1036
-      : CONID                 { toModule $1 }
-      | QCONID                { toModule (fst $1 ++ "." ++ snd $1) }
+      : CONID                 { toModule $ show $1 }
+      | QCONID                { toModule $ show $1 } -- (fst $1 ++ "." ++ snd $1) }
hunk ./src/FrontEnd/HsSyn.hs 312
---type HsAsst    = (HsName,[HsType])	-- for multi-parameter type classes
---type HsAsst    = (HsName,HsName)	-- clobber
hunk ./src/FrontEnd/HsSyn.hs 372
-	| HsAsPat { hsExpName :: HsName, hsExpExp :: HsExp }  -- pattern only
+	| HsAsPat { hsExpName :: HsName, hsExpExp :: HsExp }
hunk ./src/FrontEnd/HsSyn.hs 374
-	| HsWildCard SrcLoc			-- ditto
+	| HsWildCard SrcLoc
hunk ./src/FrontEnd/Lexer.hs 32
+import Name.Name
+import Util.SetLike
hunk ./src/FrontEnd/Lexer.hs 36
-        = VarId String
-        | QVarId (String,String)
-	| ConId String
-        | QConId (String,String)
-        | VarSym String
-        | ConSym String
-        | QVarSym (String,String)
-        | QConSym (String,String)
-	| IntTok  Integer
-	| UIntTok Integer
-	| FloatTok Rational
-	| Character Char
-	| UCharacter Char
-        | StringTok String
-        | UStringTok String
-        | PragmaOptions [String]
-        | PragmaInline String          -- also for NOINLINE
-        | PragmaRules Bool
-        | PragmaSpecialize Bool
-        | PragmaStart String
-        | PragmaEnd
-
+    = VarId      !Name
+    | QVarId     !Name
+    | ConId      !Name
+    | QConId     !Name
+    | VarSym     !Name
+    | ConSym     !Name
+    | QVarSym    !Name
+    | QConSym    !Name
+    | IntTok     !Integer
+    | UIntTok    !Integer
+    | FloatTok   !Rational
+    | Character  !Char
+    | UCharacter !Char
+    | StringTok  String
+    | UStringTok String
+    | PragmaOptions [String]
+    | PragmaInline String
+    | PragmaRules !Bool
+    | PragmaSpecialize !Bool
+    | PragmaStart String
+    | PragmaEnd
hunk ./src/FrontEnd/Lexer.hs 58
-
-	| LeftParen
-	| RightParen
-	| LeftUParen
-	| RightUParen
-	| SemiColon
-        | LeftCurly
-        | RightCurly
-        | VRightCurly			-- a virtual close brace
-        | LeftSquare
-        | RightSquare
-	| Comma
-        | Underscore
-        | BackQuote
-
+    | LeftParen
+    | RightParen
+    | LeftUParen
+    | RightUParen
+    | SemiColon
+    | LeftCurly
+    | RightCurly
+    | VRightCurly -- a virtual close brace
+    | LeftSquare
+    | RightSquare
+    | Comma
+    | Underscore
+    | BackQuote
hunk ./src/FrontEnd/Lexer.hs 72
-
-	| DotDot
-	| Colon
-	| DoubleColon
-	| Equals
-	| Backslash
-	| Bar
-	| LeftArrow
-	| RightArrow
-	| At
-	| Tilde
-	| DoubleArrow
-	| Minus
-        | Quest
-	| QuestQuest
-	| StarBang
-	| Exclamation
-	| Star
-	| Hash
-	| Dot
-
+    | DotDot
+    | Colon
+    | DoubleColon
+    | Equals
+    | Backslash
+    | Bar
+    | LeftArrow
+    | RightArrow
+    | At
+    | Tilde
+    | DoubleArrow
+    | Minus
+    | Quest
+    | QuestQuest
+    | StarBang
+    | Exclamation
+    | Star
+    | Hash
+    | Dot
hunk ./src/FrontEnd/Lexer.hs 92
+    | KW_As
+    | KW_Case
+    | KW_Class
+    | KW_Alias
+    | KW_Data
+    | KW_Default
+    | KW_Deriving
+    | KW_Do
+    | KW_Else
+    | KW_Hiding
+    | KW_If
+    | KW_Import
+    | KW_In
+    | KW_Infix
+    | KW_InfixL
+    | KW_InfixR
+    | KW_Instance
+    | KW_Let
+    | KW_Module
+    | KW_NewType
+    | KW_Of
+    | KW_Then
+    | KW_Type
+    | KW_Where
+    | KW_Qualified
+    | KW_Foreign
+    | KW_Forall
+    | KW_Exists
+    | KW_Kind
+    | KW_Closed
+    | EOF
hunk ./src/FrontEnd/Lexer.hs 124
-	| KW_As
-	| KW_Case
-	| KW_Class
-        | KW_Alias
-	| KW_Data
-	| KW_Default
-	| KW_Deriving
-	| KW_Do
-	| KW_Else
-        | KW_Hiding
-	| KW_If
-	| KW_Import
-	| KW_In
-	| KW_Infix
-	| KW_InfixL
-	| KW_InfixR
-	| KW_Instance
-	| KW_Let
-	| KW_Module
-	| KW_NewType
-	| KW_Of
-	| KW_Then
-	| KW_Type
-	| KW_Where
-	| KW_Qualified
-	| KW_Foreign
-	| KW_Forall
-        | KW_Exists
-        | KW_Kind
-        | KW_Closed
-
-        | EOF
-        deriving (Eq,Show)
-
-reserved_ops :: [(String,Token)]
-reserved_ops = [
+reserved_ops :: Map.Map Name Token
+reserved_ops = procMap [
hunk ./src/FrontEnd/Lexer.hs 144
-special_varops :: [(String,Token)]
-special_varops = [
+special_varops :: Map.Map Name Token
+special_varops = procMap [
hunk ./src/FrontEnd/Lexer.hs 157
-reserved_ids :: [(String,Token)]
-reserved_ids = [
+procMap :: [(String,Token)] -> Map.Map Name Token
+procMap xs = fromList $ map f xs where
+    f (x,y) = (toUnqualName x,y)
+
+reserved_ids :: Map.Map Name Token
+reserved_ids = procMap [
hunk ./src/FrontEnd/Lexer.hs 193
-special_varids :: [(String,Token)]
-special_varids = [
+special_varids :: Map.Map Name Token
+special_varids = procMap [
hunk ./src/FrontEnd/Lexer.hs 381
-		ident <- lexWhile isIdent
-		case lookup ident (reserved_ids ++ special_varids) of
+		(toUnqualName -> ident) <- lexWhile isIdent
+		case Map.lookup ident (reserved_ids `Map.union` special_varids) of
hunk ./src/FrontEnd/Lexer.hs 392
-		return $ case lookup sym (reserved_ops ++ special_varops) of
+                let nsym = toUnqualName sym
+		return $ case Map.lookup nsym (reserved_ops `Map.union` special_varops) of
hunk ./src/FrontEnd/Lexer.hs 396
-			    ':' -> ConSym sym
-			    _   -> VarSym sym
+			    ':' -> ConSym nsym
+			    _   -> VarSym nsym
hunk ./src/FrontEnd/Lexer.hs 480
-	let conid | null qual = ConId con
-		  | otherwise = QConId (qual,con)
+	let conid | null qual = ConId (toUnqualName con)
+		  | otherwise = QConId (toName UnknownType (qual,con))
hunk ./src/FrontEnd/Lexer.hs 491
-		case lookup ident reserved_ids of
+		case Map.lookup (toUnqualName ident) reserved_ids of
hunk ./src/FrontEnd/Lexer.hs 494
-		   Nothing -> return (QVarId (qual', ident))
+		   Nothing -> return (QVarId $ toName UnknownType (qual', ident))
hunk ./src/FrontEnd/Lexer.hs 503
-		case lookup sym reserved_ops of
+                let nsym = toUnqualName sym
+		case Map.lookup nsym reserved_ops of
hunk ./src/FrontEnd/Lexer.hs 508
-			':' -> QConSym (qual', sym)
-			_   -> QVarSym (qual', sym)
+			':' -> QConSym $ toName UnknownType (qual', sym)
+			_   -> QVarSym $ toName UnknownType (qual', sym)
hunk ./src/FrontEnd/Lexer.hs 692
-pragmas_all = pragmas_parsed ++ [ (xs,PragmaStart x) | xs@(~(x:_)) <- pragmas_std ]
-
-pragmas = Map.fromList $ [ (y,Left x) | xs@(x:_)  <- pragmas_raw, y <- xs] ++  [ (y,Right w) | (xs@(~(x:_)),w)  <- pragmas_all , y <- xs]
+pragmas = Map.fromList $ [ (y,Left x) | xs@(x:_)  <- pragmas_raw, y <- xs] ++  [ (y,Right w) | (xs@(~(x:_)),w)  <- pragmas_all , y <- xs] where
+    pragmas_all = pragmas_parsed ++ [ (xs,PragmaStart x) | xs@(~(x:_)) <- pragmas_std ]
hunk ./src/FrontEnd/Lexer.hs 699
+toUnqualName n = toName UnknownType (Nothing :: Maybe Module,n)