packages feed

reanimate-0.1.1.0: posix/Reanimate/FileWatch.hs

module Reanimate.FileWatch
  ( watchFile ) where

import Control.Concurrent
import           System.Directory

watchFile :: FilePath -> IO () -> IO ()
watchFile path handler = do
    t0 <- getModificationTime path
    forkIO $ loop t0
    return ()
  where
    loop lastModTime = do
      t1 <- getModificationTime path
      if t1 /= lastModTime
        then handler >> loop t1
        else threadDelay (10^3 * delay) >> loop lastModTime
    delay = 1000 -- pool delay in ms.