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)

