on master help sign in
Implement and test transpose

--HG-- extra : convert_revision : 2b2785c486725d551910964d787eb66315e144db

commitd8b8828b0151f57a281725748f8ee65a9921a8f9 authorBryan O'Sullivan <bos@serpentine.com> dateFri 6 Mar 2009, 07:21 (18 years ago) parent6a587fd
2 files changed+12−1
Data/Text/Lazy.hs+10−1 tests/Properties.hs+2
Data/Text/Lazy.hs+10−1
@@ -57,7 +57,7 @@ module Data.Text.Lazy
5757 , map
5858 , intercalate
5959 , intersperse
60− -- , transpose
60+ , transpose
6161 -- , reverse
6262
6363 -- * Folds
@@ -354,6 +354,15 @@ intersperse :: Char -> Text -> Text
354354intersperse c t = unstream (S.intersperse c (stream t))
355355{-# INLINE intersperse #-}
356356
357+-- | /O(n)/ The 'transpose' function transposes the rows and columns
358+-- of its 'Text' argument. Note that this function uses 'pack',
359+-- 'unpack', and the list version of transpose, and is thus not very
360+-- efficient.
361+transpose :: [Text] -> [Text]
362+transpose ts = L.map (\ss -> Chunk (T.pack ss) Empty)
363+ (L.transpose (L.map unpack ts))
364+-- TODO: make this fast
365+
357366-- | /O(n)/ 'foldl', applied to a binary operator, a starting value
358367-- (typically the left-identity of the operator), and a 'Text',
359368-- reduces the 'Text' using the binary operator, from left to right.
tests/Properties.hs+2
@@ -156,6 +156,7 @@ prop_TL_intercalate c = L.intercalate c `eq` (unpackT . TL.intercalate (TL.pack
156156prop_T_intersperse c = L.intersperse c `eqP` (unpackT . T.intersperse c)
157157prop_TL_intersperse c = L.intersperse c `eqP` (unpackT . TL.intersperse c)
158158prop_T_transpose = L.transpose `eq` (map unpackT . T.transpose . map T.pack)
159+prop_TL_transpose = L.transpose `eq` (map unpackT . TL.transpose . map TL.pack)
159160prop_T_reverse = L.reverse `eqP` (unpackT . T.reverse)
160161prop_T_reverse_short n = L.reverse `eqP` (unpackT . S.reverse . shorten n . S.stream)
161162
@@ -385,6 +386,7 @@ tests = [
385386 ("prop_T_intersperse", mytest prop_T_intersperse),
386387 ("prop_TL_intersperse", mytest prop_TL_intersperse),
387388 ("prop_T_transpose", mytest prop_T_transpose),
389+ ("prop_TL_transpose", mytest prop_TL_transpose),
388390 ("prop_T_reverse", mytest prop_T_reverse),
389391 ("prop_T_reverse_short", mytest prop_T_reverse_short),
390392