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.