module Xmobar.Plugins.HandleReader
( HandleReader(..)
)
where
import System.IO ( Handle
, hIsEOF
, hGetLine
)
import Xmobar.Run.Exec ( Exec(..) )
data HandleReader
= HandleReader
Handle
String
deriving (Int -> HandleReader -> ShowS
[HandleReader] -> ShowS
HandleReader -> String
(Int -> HandleReader -> ShowS)
-> (HandleReader -> String)
-> ([HandleReader] -> ShowS)
-> Show HandleReader
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [HandleReader] -> ShowS
$cshowList :: [HandleReader] -> ShowS
show :: HandleReader -> String
$cshow :: HandleReader -> String
showsPrec :: Int -> HandleReader -> ShowS
$cshowsPrec :: Int -> HandleReader -> ShowS
Show)
instance Read HandleReader where
readsPrec :: Int -> ReadS HandleReader
readsPrec = String -> Int -> ReadS HandleReader
forall a. HasCallStack => String -> a
error String
"HandleReader: Read instance is stub"
instance Exec HandleReader where
start :: HandleReader -> (String -> IO ()) -> IO ()
start (HandleReader Handle
handle String
_) String -> IO ()
cb =
IO Bool -> IO () -> IO ()
forall (m :: * -> *). Monad m => m Bool -> m () -> m ()
untilM (Handle -> IO Bool
hIsEOF Handle
handle) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ Handle -> IO String
hGetLine Handle
handle IO String -> (String -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> IO ()
cb
alias :: HandleReader -> String
alias (HandleReader Handle
_ String
a) = String
a
untilM :: Monad m => m Bool -> m () -> m ()
untilM :: m Bool -> m () -> m ()
untilM m Bool
predicateM m ()
action = do
Bool
predicate <- m Bool
predicateM
if Bool
predicate then () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return () else m ()
action m () -> m () -> m ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> m Bool -> m () -> m ()
forall (m :: * -> *). Monad m => m Bool -> m () -> m ()
untilM m Bool
predicateM m ()
action