Create a new channel, returning its write and read ends.
Moduleunagi-chan-0.4.1.4Haskell2010
Control.Concurrent.Chan.Unagi.Unboxed
- 3 types
- 1 class
- 8 values
- Packageunagi-chan-0.4.1.4
- Exports12
- LanguageHaskell2010
- LicenceBSD-3-Clause
- SourceUnboxed.hs
Creating channels
4 declarationsThe write end of a channel created with newChan.
The read end of a channel created with newChan.
Our class of types supporting primitive array operations. Instance method definitions are architecture-dependent.
Methods
atomicUnicorn :: Maybe aWhen the read and write operations of the underlying
Priminstances on aligned memory are atomic, this may be set toJust xwherexis some rare (i.e. unlikely to occur frequently in your data) magic value; this might help speed up someUnagiPrimoperations.Where those
Priminstance operations are not atomic, this *must* be set toNothing.
Instances14UnagiPrim, …
UnagiPrim Int16Defined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.Unboxed.InternalUnagiPrim Int32Defined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.Unboxed.InternalUnagiPrim Int64Defined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.Unboxed.InternalUnagiPrim Int8Defined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.Unboxed.InternalUnagiPrim Word16Defined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.Unboxed.InternalUnagiPrim Word32Defined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.Unboxed.InternalUnagiPrim Word64Defined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.Unboxed.InternalUnagiPrim Word8Defined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.Unboxed.InternalUnagiPrim CharDefined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.Unboxed.InternalUnagiPrim DoubleDefined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.Unboxed.InternalUnagiPrim FloatDefined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.Unboxed.InternalUnagiPrim IntDefined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.Unboxed.InternalUnagiPrim WordDefined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.Unboxed.InternalUnagiPrim AddrDefined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.Unboxed.Internal
Channel operations
0 declarationsReading
Read an element from the chan, blocking if the chan is empty.
Note re. exceptions: When an async exception is raised during a readChan
the message that the read would have returned is likely to be lost, even when
the read is known to be blocked on an empty queue. If you need to handle
this scenario, you can use readChanOnException.
Like readChan but allows recovery of the queue element which would have
been read, in the case that an async exception is raised during the read. To
be precise exceptions are raised, and the handler run, only when
readChanOnException is blocking.
The second argument is a handler that takes a blocking IO action returning
the element, and performs some recovery action. When the handler is called,
the passed IO a is the only way to access the element.
Returns immediately with:
an
Element afuture, which returns one unique element when it becomes available via tryRead.a blocking
IOaction that returns the element when it becomes available.
Note: This is a destructive operation. See Element for more details.
If you're using this function exclusively you might find the implementation in Control.Concurrent.Chan.Unagi.NoBlocking.Unboxed is faster.
Note re. exceptions: When an async exception is raised during a tryReadChan
the message that the read would have returned is likely to be lost, just as
it would be when raised directly after this function returns.
An IO action that returns a particular enqueued element when and if it
becomes available.
Each Element corresponds to a particular enqueued element, i.e. a returned
Element always offers the only means to access one particular enqueued
item. The value returned by tryRead moves monotonically from Nothing
to Just a when and if an element becomes available, and is idempotent at
that point.
So for instance:
(in, out) <- newChan
(el, _) <- tryReadChan out -- READ FROM EMPTY CHAN
writeChan in "msg1"
writeChan in "msg2"
readChan out -- RETURNS "msg2"
tryRead el -- RETURNS "msg1" (which would otherwise be lost)
Instances7Monad, Functor, MonadFix, MonadFail, Applicative, Alternative, …
Monad ElementDefined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.NoBlocking.TypesFunctor ElementDefined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.NoBlocking.TypesMonadFix ElementDefined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.NoBlocking.TypesMonadFail ElementDefined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.NoBlocking.TypesApplicative ElementDefined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.NoBlocking.TypesAlternative ElementDefined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.NoBlocking.TypesMonadPlus ElementDefined in unagi-chan-0.4.1.4 · Control.Concurrent.Chan.Unagi.NoBlocking.Types
Return a lazy infinite list representing the contents of the supplied OutChan, much like System.IO.hGetContents.
Writing
Write a value to the channel.
Write an entire list of items to a chan type. Writes here from multiple threads may be interleaved, and infinite lists are supported.
Broadcasting
Duplicate a chan: the returned OutChan begins empty, but data written to
the argument InChan from then on will be available from both the original
OutChan and the one returned here, creating a kind of broadcast channel.