-- | @toCaseFold@, @toLower@, @toUpper@ and @stripStart@ are standard 'Text' utilities,
-- here acting as 'Text' pipes, rather as they would on a lazy text
-toCaseFold :: Monad m => Pipe Text Text m ()
+toCaseFold :: Monad m => Pipe Text Text m r
toCaseFold = P.map T.toCaseFold
{-# INLINEABLE toCaseFold #-}
-- | lowercase incoming 'Text'
-toLower :: Monad m => Pipe Text Text m ()
+toLower :: Monad m => Pipe Text Text m r
toLower = P.map T.toLower
{-# INLINEABLE toLower #-}
-- $lenses
Codec
, decode
- -- * Viewing the Text in a ByteString
+ -- * \'Viewing\' the Text in a byte stream
-- $codecs
, utf8
, utf8Pure
import Data.Word (Word8)
import Pipes
-
type Lens' a b = forall f . Functor f => (b -> f b) -> (a -> f a)
{- $lenses
> zoom utf8 drawChar :: Monad m => StateT (Producer ByteString m r) m (Maybe Char)
- or, with the type synonymn of @Pipes.Parse@:
+ or, using the type synonymn from @Pipes.Parse@:
> zoom utf8 drawChar :: Monad m => Parser ByteString m (Maybe Char)
- Thus we can define ByteString like this:
+ Thus we can define a ByteString parser like this:
> withNextByte :: Parser ByteString m (Maybe Char, Maybe Word8)))
> withNextByte = do char_ <- zoom utf8 Text.drawChar
* Like the functions in @Data.Text.IO@, they attempt to work with the system encoding.
- * Like the functions in @Data.Text.IO@, they are slower than ByteString operations. Where
+ * Like the functions in @Data.Text.IO@, they significantly slower than ByteString operations. Where
you know what encoding you are working with, use @Pipes.ByteString@ and @Pipes.Text.Encoding@ instead,
e.g. @view utf8 Bytes.stdin@ instead of @Text.stdin@
- * Like the functions in @Data.Text.IO@ , they use Text exceptions.
+ * Like the functions in @Data.Text.IO@ , they use Text exceptions, not the standard Pipes protocols.
Something like