module JuicyBar.Input.Stdin (readStdin) where import FRP.Grapefruit.Signal as Signal import FRP.Grapefruit.Signal.Discrete as DSignal import FRP.Grapefruit.Signal.Segmented as SSignal import FRP.Grapefruit.Setup (Setup, fromIO) import FRP.Grapefruit.Circuit as Circuit import Control.Arrow as Arrow import Control.Concurrent import System.IO import Graphics.UI.Gtk registerStdinReader :: (String -> IO ()) -> Setup registerStdinReader handler = fromIO $ forkIO loop >> return () where loop = do line <- getLine postGUIAsync (handler line) loop readStdin :: Circuit era () (SSignal era String) readStdin = arr (construct "") <<< produce (DSignal.producer registerStdinReader)