The module System.IO.ExplicitIOModes exports a
Handle to a file which is parameterized with the
IOMode the handle is in. All operations on handles
explicitly specify the needed IOMode. This way it is
impossible to read from a write-only handle or write to
a read-only handle for example.
See the explicit-iomodes-bytestring/text package for
ByteString/Text operations.