Also included a useful utility read_line to read a NL-terminated
line from an Fd. It deliberately uses no handles and so never
messes with Fd (in particular, it doesn't put the file descriptor in the
non-blocking mode)

Simple and reliable uni- and bi-directional pipes

MySysOpen module offers a reliable, proven way of interacting with another
local or remote process via a unidirectional or bidirectional channel. It
supports pipes and Unix and TCP sockets. MySysOpen is a simple and explicit
alternative to the multi-threaded IO processing of the GHC run-time system. The
module is the Haskell binding to sys_open -- the extended, user-level file
opening interface.

The second half of MySysOpen.hs contains several bi-directional channel
interaction tests. One checks repeated sending and receiving of data; the
amount of received data is intentionally large, about 510K. Two other tests
interact with programs that are not specifically written for interactive use,
such as sort. The latter cannot produce any output before it has read all of
the input, accepting no input terminator other than the EOF condition. One test
uses shutdown to set the EOF condition. The other test programs the handler for
a custom EOF indicator, literally in the file name of the communication pipe.