An IOPort is a synchronising variable, used
for communication between concurrent threads, where one of the threads is
controlled by an external state. e.g. by an I/O action that is serviced by the
runtime. It can be thought of as a box, which may be empty or full.
It is mostly similar to the behavior of Control.Concurrent.MVar.MVar
except writeIOPort doesn't block if the variable is full and the GC
won't forcibly release the lock if it thinks
there's a deadlock.
The properties of IOPorts are: * Writing to an empty IOPort will not block. * Writing to an full IOPort will not block. It might throw an exception. * Reading from an IOPort for the second time might throw an exception. * Reading from a full IOPort will not block, return the value and empty the port. * Reading from an empty IOPort will block until a write. * Reusing an IOPort (that is, reading or writing twice) is not supported and might throw an exception. Even if reads and writes are interleaved.
This type is very much GHC internal. It might be changed or removed without notice in future releases.
Instances1Eq
Eq (IOPort a)Defined in ghc-internal-9.1003.0 · GHC.Internal.IOPort