{-# LANGUAGE Arrows #-} module JuicyBar.Input.Command (getCommandOutput) where import FRP.Grapefruit.Signal as Signal import FRP.Grapefruit.Signal.Continuous as CSignal import FRP.Grapefruit.Circuit as Circuit import Control.Arrow as Arrow import System.IO import System.Process produceCommandOutput :: String -> IO String produceCommandOutput cmd = do (_,out,_,_) <- runInteractiveCommand cmd l <- hGetLine out `catch` const (return $ "Error while running '"++cmd++"'") hClose out return l getCommandOutput :: Circuit era String (CSignal era String) getCommandOutput = proc cmd -> produce $ CSignal.producer $ produceCommandOutput cmd -<< ()