| lit_ty == floatTy = ConPat floatDataCon lit_ty [] [] [LitPat (mk_float lit) floatPrimTy]
| lit_ty == doubleTy = ConPat doubleDataCon lit_ty [] [] [LitPat (mk_double lit) doublePrimTy]
- -- Convert literal patterns like "foo" to 'f':'o':'o':[]
+ -- Convert short string-literal patterns like "f" to 'f':[]
| str_lit lit = mk_list lit
| otherwise = default_pat
mk_double (HsFrac f) = HsDoublePrim f
mk_double l@(HsLitLit s) = l
- null_str_lit (HsString s) = _NULL_ s
- null_str_lit other_lit = False
-
- str_lit (HsString s) = True
+ str_lit (HsString s) = _LENGTH_ s <= 1 -- Short string literals only
str_lit _ = False
mk_list (HsString s) = foldr
% -----------------------------------------------------------------------------
-% $Id: PrelBase.lhs,v 1.36 2000/08/29 17:42:17 qrczak Exp $
+% $Id: PrelBase.lhs,v 1.37 2000/09/07 09:10:07 simonpj Exp $
%
% (c) The University of Glasgow, 1992-2000
%
%*********************************************************
\begin{code}
-{-
+{-
data Bool = False | True
data Ordering = LT | EQ | GT
data Char = C# Char#
type String = [Char]
data Int = I# Int#
data () = ()
--- data [] a = MkNil
+data [] a = MkNil
not True = False
(&&) True True = True
m >> k = m >>= \_ -> k
fail s = error s
-
\end{code}
ord (C# c) = I# (ord# c)
\end{code}
+String equality is used when desugaring pattern-matches against strings.
+It's worth making it fast, and providing a rule to use the fast version
+where possible.
+
+\begin{code}
+eqString :: String -> String -> Bool
+eqString [] [] = True
+eqString (C# c1 : cs1) (C# c2 : cs2) = c1 `eqChar#` c2 && cs1 `eqString` cs2
+eqString _ _ = False
+
+{-# RULES
+"eqString" (==) = eqString
+ #-}
+\end{code}
%*********************************************************
%* *
-- unpackFoldr "foo" c (unpackFoldr "baz" c n) = unpackFoldr "foobaz" c n
#-}
-
\end{code}