Finally, you can stream to and from stdin and stdout using the predefined stdin
and stdout pipes, as with the following "echo" program:

main = runEffect $ Text.stdin >-> Text.stdout

Caveats

The operations exported here are a convenience, like the similar operations in
Data.Text.IO (or rather, Data.Text.Lazy.IO, since, again, Producer Text m r is
'effectful text' and something like the pipes equivalent of lazy Text.)

Like the functions in Data.Text.IO, they attempt to work with the system encoding.

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, not the standard Pipes protocols.

yields a stream of Text, and follows
standard pipes protocols by reverting to (i.e. returning) the underlying byte stream
upon reaching any decoding error. (See especially the pipes-binary package.)

By contrast, something like

Text.fromHandle :: Handle -> Producer Text IO ()

supplies a stream of text returning '()', which is convenient for many tasks,
but violates the pipes pipes-binary approach to decoding errors and
throws an exception of the kind characteristic of the text library instead.

Producers

Convert a Handle into a text stream using a text size
determined by the good sense of the text library. Note with the remarks
at the head of this module that this
is slower than view utf8 (Pipes.ByteString.fromHandle h)
but uses the system encoding and has other nice Data.Text.IO features