explicitly tag Data.ByteString rules with the FPS prefix.
authorDon Stewart <dons@cse.unsw.edu.au>
Thu, 24 Aug 2006 04:13:26 +0000 (04:13 +0000)
committerDon Stewart <dons@cse.unsw.edu.au>
Thu, 24 Aug 2006 04:13:26 +0000 (04:13 +0000)
Data/ByteString.hs
Data/ByteString/Char8.hs
Data/ByteString/Fusion.hs

index df76e6b..927a91f 100644 (file)
@@ -453,7 +453,7 @@ unpackList (PS fp off len) = withPtr fp $ \p -> do
     loop (p `plusPtr` off) (len-1) []
 
 {-# RULES
-"unpack-list"  [1]  forall p  . unpackFoldr p (:) [] = unpackList p
+    "FPS unpack-list"  [1]  forall p  . unpackFoldr p (:) [] = unpackList p
  #-}
 
 #endif
@@ -513,7 +513,7 @@ lengthU = foldl' (const . (+1)) (0::Int)
 {-# RULES
 
 -- v2 fusion
-"length/loop" forall loop s .
+"FPS length/loop" forall loop s .
   length  (loopArr (loopWrapper loop s)) =
   lengthU (loopArr (loopWrapper loop s))
 
@@ -819,11 +819,11 @@ minimumU = foldl1' min
 
 {-# RULES
 
-"minimum/loop" forall loop s .
+"FPS minimum/loop" forall loop s .
   minimum  (loopArr (loopWrapper loop s)) =
   minimumU (loopArr (loopWrapper loop s))
 
-"maximum/loop" forall loop s .
+"FPS maximum/loop" forall loop s .
   maximum  (loopArr (loopWrapper loop s)) =
   maximumU (loopArr (loopWrapper loop s))
 
@@ -1438,8 +1438,8 @@ filterByte w ps = replicate (count w ps) w
 
 #if __GLASGOW_HASKELL__ >= 605
 {-# RULES
-"FPS specialise filter (== x)" forall x.
-    filter (== x) = filterByte x
+  "FPS specialise filter (== x)" forall x.
+     filter (== x) = filterByte x
   #-}
 #endif
 
@@ -1582,6 +1582,9 @@ zipWith :: (Word8 -> Word8 -> a) -> ByteString -> ByteString -> [a]
 zipWith f ps qs
     | null ps || null qs = []
     | otherwise = f (unsafeHead ps) (unsafeHead qs) : zipWith f (unsafeTail ps) (unsafeTail qs)
+#if defined(__GLASGOW_HASKELL__)
+{-# INLINE [1] zipWith #-}
+#endif
 
 --
 -- | A specialised version of zipWith for the common case of a
@@ -1613,6 +1616,7 @@ zipWith' f (PS fp s l) (PS fq t m) = inlinePerformIO $
 
 "FPS specialise zipWith" forall (f :: Word8 -> Word8 -> Word8) p q .
     zipWith f p q = unpack (zipWith' f p q)
+
   #-}
 
 -- | /O(n)/ 'unzip' transforms a list of pairs of bytes into a pair of
index 93f6dc5..bd4b31a 100644 (file)
@@ -307,16 +307,15 @@ pack str = B.unsafeCreate (P.length str) $ \(Ptr p) -> stToIO (go p str)
     writeByte p c = ST $ \s# ->
         case writeWord8OffAddr# p 0# c s# of s2# -> (# s2#, () #)
     {-# INLINE writeByte #-}
+{-# INLINE [1] pack #-}
 
 {-# RULES
-"pack/packAddress" forall s# .
-                   pack (unpackCString# s#) = B.packAddress s#
+    "FPS pack/packAddress" forall s .
+       pack (unpackCString# s) = B.packAddress s
  #-}
 
 #endif
 
-{-# INLINE pack #-}
-
 -- | /O(n)/ Converts a 'ByteString' to a 'String'.
 unpack :: ByteString -> [Char]
 unpack = P.map w2c . B.unpack
@@ -520,12 +519,16 @@ takeWhile f = B.takeWhile (f . w2c)
 -- | 'dropWhile' @p xs@ returns the suffix remaining after 'takeWhile' @p xs@.
 dropWhile :: (Char -> Bool) -> ByteString -> ByteString
 dropWhile f = B.dropWhile (f . w2c)
-{-# INLINE dropWhile #-}
+#if defined(__GLASGOW_HASKELL__)
+{-# INLINE [1] dropWhile #-}
+#endif
 
 -- | 'break' @p@ is equivalent to @'span' ('not' . p)@.
 break :: (Char -> Bool) -> ByteString -> (ByteString, ByteString)
 break f = B.break (f . w2c)
-{-# INLINE break #-}
+#if defined(__GLASGOW_HASKELL__)
+{-# INLINE [1] break #-}
+#endif
 
 -- | 'span' @p xs@ breaks the ByteString into two segments. It is
 -- equivalent to @('takeWhile' p xs, 'dropWhile' p xs)@
index 99cfa2b..7821e16 100644 (file)
@@ -233,7 +233,7 @@ loopU f start (PS z s i) = unsafePerformIO $ withForeignPtr z $ \a -> do
 
 {-# RULES
 
-"loop/loop fusion!" forall em1 em2 start1 start2 arr.
+"FPS loop/loop fusion!" forall em1 em2 start1 start2 arr.
   loopU em2 start2 (loopArr (loopU em1 start1 arr)) =
     loopSndAcc (loopU (em1 `fuseEFL` em2) (start1 :*: start2) arr)
 
@@ -260,7 +260,7 @@ loopL f = loop
 
 {-# RULES
 
-"lazy loop/loop fusion!" forall em1 em2 start1 start2 arr.
+"FPS lazy loop/loop fusion!" forall em1 em2 start1 start2 arr.
   loopL em2 start2 (loopArr (loopL em1 start1 arr)) =
     loopSndAcc (loopL (em1 `fuseEFL` em2) (start1 :*: start2) arr)
 
@@ -430,13 +430,13 @@ sequenceLoops loop1 loop2 src dest len0 = do
 
 {-# RULES
 
-"loopArr/loopSndAcc" forall x.
+"FPS loopArr/loopSndAcc" forall x.
   loopArr (loopSndAcc x) = loopArr x
 
-"seq/NoAcc" forall (u::NoAcc) e.
+"FPS seq/NoAcc" forall (u::NoAcc) e.
   u `seq` e = e
 
-"loop/loop wrapper elimination" forall loop1 loop2 arr.
+"FPS loop/loop wrapper elimination" forall loop1 loop2 arr.
   loopWrapper loop2 (loopArr (loopWrapper loop1 arr)) =
     loopSndAcc (loopWrapper (sequenceLoops loop1 loop2) arr)
 
@@ -445,95 +445,95 @@ sequenceLoops loop1 loop2 src dest len0 = do
 -- is monadic, so its really n >> m fusion (i.e. m.n), not n . m fusion.
 --
 
-"up/up loop fusion" forall f1 f2 acc1 acc2.
+"FPS up/up loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doUpLoop f1 acc1) (doUpLoop f2 acc2) =
     doUpLoop (f1 `fuseAccAccEFL` f2) (acc1 :*: acc2)
 
-"map/map loop fusion" forall f1 f2 acc1 acc2.
+"FPS map/map loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doMapLoop f1 acc1) (doMapLoop f2 acc2) =
     doMapLoop (f1 `fuseMapMapEFL` f2) (acc1 :*: acc2)
 
-"filter/filter loop fusion" forall f1 f2 acc1 acc2.
+"FPS filter/filter loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doFilterLoop f1 acc1) (doFilterLoop f2 acc2) =
     doFilterLoop (f1 `fuseFilterFilterEFL` f2) (acc1 :*: acc2)
 
-"map/filter loop fusion" forall f1 f2 acc1 acc2.
+"FPS map/filter loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doMapLoop f1 acc1) (doFilterLoop f2 acc2) =
     doNoAccLoop (f1 `fuseMapFilterEFL` f2) (acc1 :*: acc2)
 
-"filter/map loop fusion" forall f1 f2 acc1 acc2.
+"FPS filter/map loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doFilterLoop f1 acc1) (doMapLoop f2 acc2) =
     doNoAccLoop (f1 `fuseFilterMapEFL` f2) (acc1 :*: acc2)
 
-"map/up loop fusion" forall f1 f2 acc1 acc2.
+"FPS map/up loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doMapLoop f1 acc1) (doUpLoop f2 acc2) =
     doUpLoop (f1 `fuseMapAccEFL` f2) (acc1 :*: acc2)
 
-"up/map loop fusion" forall f1 f2 acc1 acc2.
+"FPS up/map loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doUpLoop f1 acc1) (doMapLoop f2 acc2) =
     doUpLoop (f1 `fuseAccMapEFL` f2) (acc1 :*: acc2)
 
-"filter/up loop fusion" forall f1 f2 acc1 acc2.
+"FPS filter/up loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doFilterLoop f1 acc1) (doUpLoop f2 acc2) =
     doUpLoop (f1 `fuseFilterAccEFL` f2) (acc1 :*: acc2)
 
-"up/filter loop fusion" forall f1 f2 acc1 acc2.
+"FPS up/filter loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doUpLoop f1 acc1) (doFilterLoop f2 acc2) =
     doUpLoop (f1 `fuseAccFilterEFL` f2) (acc1 :*: acc2)
 
-"down/down loop fusion" forall f1 f2 acc1 acc2.
+"FPS down/down loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doDownLoop f1 acc1) (doDownLoop f2 acc2) =
     doDownLoop (f1 `fuseAccAccEFL` f2) (acc1 :*: acc2)
 
-"map/down fusion" forall f1 f2 acc1 acc2.
+"FPS map/down fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doMapLoop f1 acc1) (doDownLoop f2 acc2) =
     doDownLoop (f1 `fuseMapAccEFL` f2) (acc1 :*: acc2)
 
-"down/map loop fusion" forall f1 f2 acc1 acc2.
+"FPS down/map loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doDownLoop f1 acc1) (doMapLoop f2 acc2) =
     doDownLoop (f1 `fuseAccMapEFL` f2) (acc1 :*: acc2)
 
-"filter/down fusion" forall f1 f2 acc1 acc2.
+"FPS filter/down fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doFilterLoop f1 acc1) (doDownLoop f2 acc2) =
     doDownLoop (f1 `fuseFilterAccEFL` f2) (acc1 :*: acc2)
 
-"down/filter loop fusion" forall f1 f2 acc1 acc2.
+"FPS down/filter loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doDownLoop f1 acc1) (doFilterLoop f2 acc2) =
     doDownLoop (f1 `fuseAccFilterEFL` f2) (acc1 :*: acc2)
 
-"noAcc/noAcc loop fusion" forall f1 f2 acc1 acc2.
+"FPS noAcc/noAcc loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doNoAccLoop f1 acc1) (doNoAccLoop f2 acc2) =
     doNoAccLoop (f1 `fuseNoAccNoAccEFL` f2) (acc1 :*: acc2)
 
-"noAcc/up loop fusion" forall f1 f2 acc1 acc2.
+"FPS noAcc/up loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doNoAccLoop f1 acc1) (doUpLoop f2 acc2) =
     doUpLoop (f1 `fuseNoAccAccEFL` f2) (acc1 :*: acc2)
 
-"up/noAcc loop fusion" forall f1 f2 acc1 acc2.
+"FPS up/noAcc loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doUpLoop f1 acc1) (doNoAccLoop f2 acc2) =
     doUpLoop (f1 `fuseAccNoAccEFL` f2) (acc1 :*: acc2)
 
-"map/noAcc loop fusion" forall f1 f2 acc1 acc2.
+"FPS map/noAcc loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doMapLoop f1 acc1) (doNoAccLoop f2 acc2) =
     doNoAccLoop (f1 `fuseMapNoAccEFL` f2) (acc1 :*: acc2)
 
-"noAcc/map loop fusion" forall f1 f2 acc1 acc2.
+"FPS noAcc/map loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doNoAccLoop f1 acc1) (doMapLoop f2 acc2) =
     doNoAccLoop (f1 `fuseNoAccMapEFL` f2) (acc1 :*: acc2)
 
-"filter/noAcc loop fusion" forall f1 f2 acc1 acc2.
+"FPS filter/noAcc loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doFilterLoop f1 acc1) (doNoAccLoop f2 acc2) =
     doNoAccLoop (f1 `fuseFilterNoAccEFL` f2) (acc1 :*: acc2)
 
-"noAcc/filter loop fusion" forall f1 f2 acc1 acc2.
+"FPS noAcc/filter loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doNoAccLoop f1 acc1) (doFilterLoop f2 acc2) =
     doNoAccLoop (f1 `fuseNoAccFilterEFL` f2) (acc1 :*: acc2)
 
-"noAcc/down loop fusion" forall f1 f2 acc1 acc2.
+"FPS noAcc/down loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doNoAccLoop f1 acc1) (doDownLoop f2 acc2) =
     doDownLoop (f1 `fuseNoAccAccEFL` f2) (acc1 :*: acc2)
 
-"down/noAcc loop fusion" forall f1 f2 acc1 acc2.
+"FPS down/noAcc loop fusion" forall f1 f2 acc1 acc2.
   sequenceLoops (doDownLoop f1 acc1) (doNoAccLoop f2 acc2) =
     doDownLoop (f1 `fuseAccNoAccEFL` f2) (acc1 :*: acc2)