module Control.Concurrent.STM.Split.Class (
   In, Out, C, newIO, new, read, write,
   ) where

import Control.Monad.STM (STM, )

import Prelude (IO, )


data In = In
data Out = Out

_dummyIn :: In
_dummyIn = In

_dummyOut :: Out
_dummyOut = Out

class C chan where
   newIO :: IO (chan In a, chan Out a)
   new :: STM (chan In a, chan Out a)
   read :: chan Out a -> STM a
   write :: chan In a -> a -> STM ()