% -----------------------------------------------------------------------------
-% $Id: PrelBase.lhs,v 1.35 2000/08/07 23:37:23 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}
%*********************************************************
%* *
(ord# (indexCharOffAddr# addr (nh +# 2#)) `iShiftL#` 6#) +#
(ord# (indexCharOffAddr# addr (nh +# 3#))) -# 0x3C82080#))
: unpack (nh +# 4#)
- | ch `leChar#` '\xFB'# = C# (chr# ((ord# ch `iShiftL#` 24#) +#
+ | ch `leChar#` '\xFB'# = C# (chr# ((ord# ch -# 0xF8# `iShiftL#` 24#) +#
(ord# (indexCharOffAddr# addr (nh +# 1#)) `iShiftL#` 18#) +#
(ord# (indexCharOffAddr# addr (nh +# 2#)) `iShiftL#` 12#) +#
(ord# (indexCharOffAddr# addr (nh +# 3#)) `iShiftL#` 6#) +#
- (ord# (indexCharOffAddr# addr (nh +# 4#))) -# 0xFA082080#))
+ (ord# (indexCharOffAddr# addr (nh +# 4#))) -# 0x2082080#))
: unpack (nh +# 5#)
| otherwise = C# (chr# (((ord# ch -# 0xFC#) `iShiftL#` 30#) +#
- (ord# (indexCharOffAddr# addr (nh +# 1#)) `iShiftL#` 24#) +#
+ ((ord# (indexCharOffAddr# addr (nh +# 1#)) -# 0x80#)
+ `iShiftL#` 24#) +#
(ord# (indexCharOffAddr# addr (nh +# 2#)) `iShiftL#` 18#) +#
(ord# (indexCharOffAddr# addr (nh +# 3#)) `iShiftL#` 12#) +#
(ord# (indexCharOffAddr# addr (nh +# 4#)) `iShiftL#` 6#) +#
- (ord# (indexCharOffAddr# addr (nh +# 5#))) -# 0x82082080#))
+ (ord# (indexCharOffAddr# addr (nh +# 5#))) -# 0x2082080#))
: unpack (nh +# 6#)
where
ch = indexCharOffAddr# addr nh
-- unpackFoldr "foo" c (unpackFoldr "baz" c n) = unpackFoldr "foobaz" c n
#-}
-
\end{code}