Description
Write once concurrency primitives.
Description
IVars are write-once (immutable) variables.
They can be read, an operation that will block until a value was written to the variable. They can be written to exactly once.
README.md
What is this?
ivar-simple provides immutable, write-once variables (IVars) in the Data.IVar.Simple module.
It also provides two more experimental channel implementations built on top of IVars,
Data.IVar.Simple.IChan: multi-cast channels with write-once semantics.Data.IVar.Simple.MIChan: channels with write semantics similar to Control.Concurrent.Chan
Comparison to data-ivar
Both data-ivar and ivar-simple provide a write-once variable. That's where the similarities end:
- Reading an
IVarwith data-ivar is anIOoperation. In ivar-simple it's a pure function. - data-ivar provides a
Readermonoid, monad, etc. for reading from one of severalIVars. ivar-simple has no such functionality. - The data-ivar implementation can, in principle, add arbitrary
IOactions that are called when anIVaris written. (This detail is not exposed, however) - Technically, ivar-simple tries for efficiency by exploiting the existing locking structures in the RTS; in particular, reading a full
IVarfor a second time is as cheap as evaluating a record selector. (I have no performance numbers for this.)