{-# LANGUAGE Arrows #-}
module JuicyBar.Input.Pipe (readPipe) where
import FRP.Grapefruit.Signal as Signal
import FRP.Grapefruit.Signal.Discrete as DSignal
import FRP.Grapefruit.Setup (Setup, fromIO)
import FRP.Grapefruit.Circuit as Circuit
import Control.Arrow as Arrow
import Control.Concurrent
import System.IO

registerPipeReader :: FilePath -> (String -> IO ()) -> Setup
registerPipeReader path handler = fromIO $ forkIO action >> return ()
    where
    action = do
        h <- openFile path ReadMode
        loop h
    loop h = hGetLine h >>= handler >> loop h

readPipe :: Circuit era FilePath (DSignal era String)
readPipe = proc path -> do
    signal <- produce $ DSignal.producer $ registerPipeReader path -<< ()
    returnA -< signal
    

