{-# LANGUAGE RecordWildCards #-}
module Xmobar.Plugins.QueueReader
(QueueReader (..)
) where
import Xmobar.Run.Exec (Exec (..))
import Control.Monad (forever)
import qualified Control.Concurrent.STM as STM
data QueueReader a
= QueueReader
{ forall a. QueueReader a -> TQueue a
qQueue :: STM.TQueue a
, forall a. QueueReader a -> a -> String
qShowItem :: a -> String
, forall a. QueueReader a -> String
qName :: String
}
instance Show (QueueReader a) where
show :: QueueReader a -> String
show QueueReader a
q = String
"QueueReader " forall a. Semigroup a => a -> a -> a
<> forall a. QueueReader a -> String
qName QueueReader a
q
instance Read (QueueReader a) where
readsPrec :: Int -> ReadS (QueueReader a)
readsPrec = forall a. HasCallStack => String -> a
error String
"QueueReader: instance is a stub"
instance Exec (QueueReader a) where
start :: QueueReader a -> (String -> IO ()) -> IO ()
start QueueReader{String
TQueue a
a -> String
qName :: String
qShowItem :: a -> String
qQueue :: TQueue a
qName :: forall a. QueueReader a -> String
qShowItem :: forall a. QueueReader a -> a -> String
qQueue :: forall a. QueueReader a -> TQueue a
..} String -> IO ()
cb =
forall (f :: * -> *) a b. Applicative f => f a -> f b
forever (forall a. STM a -> IO a
STM.atomically (a -> String
qShowItem forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. TQueue a -> STM a
STM.readTQueue TQueue a
qQueue) forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> IO ()
cb)
alias :: QueueReader a -> String
alias = forall a. QueueReader a -> String
qName