diff options
-rw-r--r-- | Pipes/Text.hs | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/Pipes/Text.hs b/Pipes/Text.hs index 7722f7f..0f2e31d 100644 --- a/Pipes/Text.hs +++ b/Pipes/Text.hs | |||
@@ -128,8 +128,16 @@ import Prelude hiding ( | |||
128 | words, | 128 | words, |
129 | writeFile ) | 129 | writeFile ) |
130 | 130 | ||
131 | 131 | -- $setup | |
132 | -- | Convert a lazy 'TL.Text' into a 'Producer' of strict 'Text's | 132 | -- >>> :set -XOverloadedStrings |
133 | -- >>> import Data.Text (Text) | ||
134 | -- >>> import qualified Data.Text as T | ||
135 | -- >>> import qualified Data.Text.Lazy.IO as TL | ||
136 | -- >>> import Data.Char | ||
137 | |||
138 | -- | Convert a lazy 'TL.Text' into a 'Producer' of strict 'Text's. Producers in | ||
139 | -- IO can be found in 'Pipes.Text.IO' or in pipes-bytestring, employed with the | ||
140 | -- decoding lenses in 'Pipes.Text.Encoding' | ||
133 | fromLazy :: (Monad m) => TL.Text -> Producer' Text m () | 141 | fromLazy :: (Monad m) => TL.Text -> Producer' Text m () |
134 | fromLazy = TL.foldrChunks (\e a -> yield e >> a) (return ()) | 142 | fromLazy = TL.foldrChunks (\e a -> yield e >> a) (return ()) |
135 | {-# INLINE fromLazy #-} | 143 | {-# INLINE fromLazy #-} |
@@ -138,11 +146,17 @@ fromLazy = TL.foldrChunks (\e a -> yield e >> a) (return ()) | |||
138 | a ^. lens = getConstant (lens Constant a) | 146 | a ^. lens = getConstant (lens Constant a) |
139 | 147 | ||
140 | -- | Apply a transformation to each 'Char' in the stream | 148 | -- | Apply a transformation to each 'Char' in the stream |
149 | |||
150 | -- >>> let margaret = ["Margaret, are you grieving\nOver Golde","ngrove unleaving?":: Text] | ||
151 | -- >>> TL.putStrLn $ toLazy $ each margaret >-> map Data.Char.toUpper | ||
152 | -- MARGARET, ARE YOU GRIEVING | ||
153 | -- OVER GOLDENGROVE UNLEAVING? | ||
141 | map :: (Monad m) => (Char -> Char) -> Pipe Text Text m r | 154 | map :: (Monad m) => (Char -> Char) -> Pipe Text Text m r |
142 | map f = P.map (T.map f) | 155 | map f = P.map (T.map f) |
143 | {-# INLINABLE map #-} | 156 | {-# INLINABLE map #-} |
144 | 157 | ||
145 | -- | Map a function over the characters of a text stream and concatenate the results | 158 | -- | Map a function over the characters of a text stream and concatenate the results |
159 | |||
146 | concatMap | 160 | concatMap |
147 | :: (Monad m) => (Char -> Text) -> Pipe Text Text m r | 161 | :: (Monad m) => (Char -> Text) -> Pipe Text Text m r |
148 | concatMap f = P.map (T.concatMap f) | 162 | concatMap f = P.map (T.concatMap f) |
@@ -184,6 +198,11 @@ filter predicate = P.map (T.filter predicate) | |||
184 | {-# INLINABLE filter #-} | 198 | {-# INLINABLE filter #-} |
185 | 199 | ||
186 | -- | Strict left scan over the characters | 200 | -- | Strict left scan over the characters |
201 | -- >>> let margaret = ["Margaret, are you grieving\nOver Golde","ngrove unleaving?":: Text] | ||
202 | -- >>> let title_caser a x = case a of ' ' -> Data.Char.toUpper x; _ -> x | ||
203 | -- >>> toLazy $ each margaret >-> scan title_caser ' ' | ||
204 | -- " Margaret, Are You Grieving\nOver Goldengrove Unleaving?" | ||
205 | |||
187 | scan | 206 | scan |
188 | :: (Monad m) | 207 | :: (Monad m) |
189 | => (Char -> Char -> Char) -> Char -> Pipe Text Text m r | 208 | => (Char -> Char -> Char) -> Char -> Pipe Text Text m r |