{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Control.Moffy.Samples.Run.TChan where

import Control.Monad.Trans
import Control.Moffy
import Control.Moffy.Run (Handle, HandleSt, St)
import Control.Concurrent.STM

import qualified Control.Moffy.Run as M

interpret :: (Monad m, MonadIO m, Adjustable es es') =>
	Handle m es' -> TChan a -> Sig s es a r -> m r
interpret :: forall (m :: * -> *) (es :: Set (*)) (es' :: Set (*)) a s r.
(Monad m, MonadIO m, Adjustable es es') =>
Handle m es' -> TChan a -> Sig s es a r -> m r
interpret Handle m es'
h TChan a
c = forall (m :: * -> *) (es :: Set (*)) (es' :: Set (*)) a s r.
(Monad m, Adjustable es es') =>
Handle m es' -> (a -> m ()) -> Sig s es a r -> m r
M.interpret Handle m es'
h (forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. STM a -> IO a
atomically forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TChan a -> a -> STM ()
writeTChan TChan a
c)

interpretSt :: (Monad m, MonadIO m, Adjustable es es') =>
	HandleSt st m es' -> TChan a -> Sig s es a r -> St st m r
interpretSt :: forall (m :: * -> *) (es :: Set (*)) (es' :: Set (*)) st a s r.
(Monad m, MonadIO m, Adjustable es es') =>
HandleSt st m es' -> TChan a -> Sig s es a r -> St st m r
interpretSt HandleSt st m es'
h TChan a
c = forall (m :: * -> *) (es :: Set (*)) (es' :: Set (*)) st a s r.
(Monad m, Adjustable es es') =>
HandleSt st m es' -> (a -> m ()) -> Sig s es a r -> St st m r
M.interpretSt HandleSt st m es'
h (forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. STM a -> IO a
atomically forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TChan a -> a -> STM ()
writeTChan TChan a
c)