Expose unpackCString#
authorBryan O'Sullivan <bos@serpentine.com>
Wed, 27 May 2015 05:46:42 +0000 (22:46 -0700)
committerBryan O'Sullivan <bos@serpentine.com>
Wed, 27 May 2015 05:46:42 +0000 (22:46 -0700)
Data/Text.hs
Data/Text/Show.hs

index 909e5be..3f7b794 100644 (file)
@@ -191,6 +191,7 @@ module Data.Text
 
     -- * Low level operations
     , copy
+    , unpackCString#
     ) where
 
 import Prelude (Char, Bool(..), Int, Maybe(..), String,
@@ -220,7 +221,7 @@ import Data.Text.Encoding (decodeUtf8, encodeUtf8)
 import Data.Text.Internal.Fusion (stream, reverseStream, unstream)
 import Data.Text.Internal.Private (span_)
 import Data.Text.Internal (Text(..), empty, firstf, mul, safe, text)
-import Data.Text.Show (singleton, unpack)
+import Data.Text.Show (singleton, unpack, unpackCString#)
 import qualified Prelude as P
 import Data.Text.Unsafe (Iter(..), iter, iter_, lengthWord16, reverseIter,
                          reverseIter_, unsafeHead, unsafeTail)
index c27544f..c8cc133 100644 (file)
@@ -17,6 +17,7 @@ module Data.Text.Show
     (
       singleton
     , unpack
+    , unpackCString#
     ) where
 
 import Control.Monad.ST (ST)
@@ -41,7 +42,10 @@ unpack :: Text -> String
 unpack = S.unstreamList . stream
 {-# INLINE [1] unpack #-}
 
--- | /O(n)/ Convert a literal string into a Text.  Subject to fusion.
+-- | /O(n)/ Convert a literal string into a 'Text'.  Subject to
+-- fusion.
+--
+-- This is exposed solely for people writing GHC rewrite rules.
 unpackCString# :: Addr# -> Text
 unpackCString# addr# = unstream (S.streamCString# addr#)
 {-# NOINLINE unpackCString# #-}