concurrent-split-0.0: src/Control/Concurrent/Split/Chan.hs
module Control.Concurrent.Split.Chan (
T,
In,
Out,
new,
read,
write,
) where
import qualified Control.Concurrent.Split.Class as Split
import qualified Control.Concurrent.Chan as Chan
import Prelude (IO, return, )
newtype T dir a = Cons (Chan.Chan a)
type In = T Split.In
type Out = T Split.Out
instance Split.C T where
new = new
read = read
write = write
new :: IO (In a, Out a)
new = do
v <- Chan.newChan
return (Cons v, Cons v)
read :: Out a -> IO a
read (Cons v) = Chan.readChan v
write :: In a -> a -> IO ()
write (Cons v) a = Chan.writeChan v a