[start adding support for user visible unboxed tuples
John Meacham <john@repetae.net>**20061107123130] hunk ./DataConstructors.hs 96
+kind KUTuple = eHash
hunk ./E/FromHs.hs 105
+kind KUTuple = eHash
hunk ./E/FromHs.hs 117
+simplifyHsPat (HsPUnboxedTuple ps) = HsPApp (nameName $ unboxedNameTuple DataConstructor (length ps)) (map simplifyHsPat ps)
hunk ./E/FromHs.hs 513
+    cExpr (HsUnboxedTuple es) = liftM eTuple' (mapM cExpr es)
hunk ./FlagOpts.flags 2
+
+!Code options
+unboxed-tuples allow unboxed tuple syntax to be recognized
hunk ./FrontEnd/HsParser.ly 67
+>	'(#'	{ LeftUParen }
+>	'#)'	{ RightUParen }
hunk ./FrontEnd/HsParser.ly 415
+>	| '(#' '#)'	                { HsTyUnboxedTuple [] }
+>	| '(#' type '#)'	        { HsTyUnboxedTuple [$2] }
+>	| '(#' types '#)'		{ HsTyUnboxedTuple (reverse $2) }
hunk ./FrontEnd/HsParser.ly 633
+>	| '(#' '#)'		        { HsUnboxedTuple [] }
+>	| '(#' exp '#)'		        { HsUnboxedTuple [$2] }
+>	| '(#' texps '#)'		{ HsUnboxedTuple (reverse $2) }
hunk ./FrontEnd/HsPretty.hs 145
+parenszh d = d >>= \d' -> return $ P.text "(# " P.<> d' P.<> P.text " #)"
+
hunk ./FrontEnd/HsPretty.hs 494
+ppHsExp (HsUnboxedTuple expList) = parenListzh . map ppHsExp $ expList
hunk ./FrontEnd/HsPretty.hs 649
+parenListzh :: [Doc] -> Doc
+parenListzh = parenszh . myFsepSimple . punctuate comma
hunk ./FrontEnd/HsSyn.hs 219
+	 | HsTyUnboxedTuple [HsType]
hunk ./FrontEnd/HsSyn.hs 276
+hsParen x@HsUnboxedTuple {} = x
hunk ./FrontEnd/HsSyn.hs 292
+	| HsUnboxedTuple [HsExp]
hunk ./FrontEnd/HsSyn.hs 318
+	| HsPUnboxedTuple [HsPat]
hunk ./FrontEnd/KindInfer.hs 34
+import Name.Names
hunk ./FrontEnd/KindInfer.hs 506
+
hunk ./FrontEnd/KindInfer.hs 516
+aHsTypeToType kt tuple@(HsTyUnboxedTuple types) = tTTuple' $ map (aHsTypeToType kt) types
hunk ./FrontEnd/KindInfer.hs 519
+
hunk ./FrontEnd/Lexer.hs 52
+	| LeftUParen
+	| RightUParen
hunk ./FrontEnd/Lexer.hs 299
+    ParseMode { parseUnboxedTuples = utup } <- lexParseMode
hunk ./FrontEnd/Lexer.hs 302
+        '(':'#':_ | utup -> do
+            discard 2
+            return LeftUParen
+        '#':')':_ | utup -> do
+            discard 2
+            return RightUParen
hunk ./FrontEnd/ParseMonad.hs 19
-		ParseMode(..), defaultParseMode,
+		ParseMode(..),
+                parseModeOptions,
hunk ./FrontEnd/ParseMonad.hs 26
-		pushContextL, popContextL
+		pushContextL, popContextL, lexParseMode
hunk ./FrontEnd/ParseMonad.hs 30
+import qualified Data.Set as Set
hunk ./FrontEnd/ParseMonad.hs 32
+import Options
+import qualified FlagOpts as FO
hunk ./FrontEnd/ParseMonad.hs 65
-		parseFilename :: String
+		parseFilename :: String,
+                parseUnboxedTuples :: Bool
hunk ./FrontEnd/ParseMonad.hs 74
-		parseFilename = "<unknown>"
+		parseFilename = "<unknown>",
+                parseUnboxedTuples = False
hunk ./FrontEnd/ParseMonad.hs 78
+parseModeOptions options = defaultParseMode { parseUnboxedTuples = FO.UnboxedTuples `Set.member` optFOptsSet options }
+
hunk ./FrontEnd/ParseMonad.hs 198
+lexParseMode :: Lex a ParseMode
+lexParseMode = Lex $ \cont -> P $ \r x y z s m -> runP (cont m) r x y z s m
+
hunk ./FrontEnd/ParseUtils.hs 141
+	HsUnboxedTuple es  -> do
+			      ps <- mapM (\e -> checkPat e []) es
+			      return (HsPUnboxedTuple ps)
hunk ./FrontEnd/ParseUtils.hs 198
+	HsUnboxedTuple es	  -> checkManyExprs es HsUnboxedTuple
hunk ./FrontEnd/Representation.hs 32
+    tTTuple',
hunk ./FrontEnd/Representation.hs 346
+tTTuple' ts = foldl TAp (TCon $ Tycon (unboxedNameTuple TypeConstructor  n) (foldr Kfun KUTuple $ replicate n Star)) ts where
+    n = length ts
+
hunk ./FrontEnd/Syn/Traverse.hs 57
+    f (HsUnboxedTuple hsExps)  = do
+        hsExps' <- fns hsExps
+        return (HsUnboxedTuple hsExps')
hunk ./FrontEnd/Syn/Traverse.hs 148
+traverseHsType f (HsTyUnboxedTuple xs) = do
+    xs <- mapM f xs
+    return $ HsTyUnboxedTuple xs
hunk ./FrontEnd/Syn/Traverse.hs 185
+    f (HsPUnboxedTuple hsPats)  = do
+          hsPats' <- mapM fn hsPats
+          return (HsPUnboxedTuple hsPats')
hunk ./FrontEnd/Tc/Kind.hs 15
+           | KUTuple                    -- ^ kind of unboxed tuples
hunk ./FrontEnd/Tc/Kind.hs 28
+   pprint KUTuple = text "(#)"
hunk ./FrontEnd/Tc/Kind.hs 30
+   pprint (Kfun KUTuple k2)   = text "(#) -> " <> pprint k2  -- ^ this is invalid
hunk ./FrontEnd/Tc/Kind.hs 32
+   pprint (Kfun k1   KUTuple) = text "(" <> pprint k1 <> text ")" <> text " -> (#)"
hunk ./FrontEnd/Tc/Kind.hs 42
-unfoldKind Star = [Star]
-unfoldKind (KVar v) = [KVar v]
hunk ./FrontEnd/Tc/Kind.hs 43
+unfoldKind v = [v]
hunk ./FrontEnd/Tc/Main.hs 264
+tiExpr tuple@(HsUnboxedTuple exps) typ = withContext (makeMsg "in the unboxed tuple" $ render $ ppHsExp tuple) $ do
+    (_,exps') <- tcApps (HsCon (nameName $ unboxedNameTuple DataConstructor (length exps))) exps typ
+    return (HsUnboxedTuple exps')
+
hunk ./FrontEnd/Tc/Main.hs 462
+tiPat (HsPUnboxedTuple ps) typ = tiPat (HsPApp (nameName $ unboxedNameTuple DataConstructor (length ps)) ps) typ
hunk ./FrontEnd/Tc/Monad.hs 73
+import Name.Names
hunk ./FrontEnd/Tc/Monad.hs 250
+        Nothing | Just 0 <- fromUnboxedNameTuple n  -> do
+            return (tTTuple' [])
+        Nothing | Just num <- fromUnboxedNameTuple n -> do
+            nvs <- mapM newVar  (replicate num Star)
+            let nvs' = map TVar nvs
+            return (TForAll nvs $ [] :=> foldr TArrow  (tTTuple' nvs') nvs')
hunk ./FrontEnd/Tc/Type.hs 26
+    tTTuple',
hunk ./Ho/Build.hs 367
-parseHsSource fn s = case runParserWithMode ParseMode { parseFilename = fn } parse  s'  of
+parseHsSource fn s = case runParserWithMode (parseModeOptions options) { parseFilename = fn } parse  s'  of
hunk ./Interactive.hs 163
-parseStmt s = case runParserWithMode ParseMode { parseFilename = "(jhci)" } parseHsStmt  s  of
+parseStmt s = case runParserWithMode (parseModeOptions options) { parseFilename = "(jhci)" } parseHsStmt  s  of