Get filesystem notifications as a stream of events, using the conduit
package to handle the stream. This uses the
fsnotify package, which
uses OS-specific file notification APIs for efficiency. Simple usage
example, a program which will print all events for the given directory
tree:
#!/usr/bin/env stack
{- stack
--resolver lts-6.15
--install-ghc
runghc
--package fsnotify-conduit
--package conduit-combinators
-}
import Conduit
import Data.Conduit.FSNotify
import System.Environment (getArgs)
main :: IO ()
main = do
args <- getArgs
dir <-
case args of
[dir] -> return dir
_ -> error $ "Expected one argument (directory to watch)"
runResourceT
$ sourceFileChanges (setRelative False $ mkFileChangeSettings dir)
$$ mapM_C (liftIO . print)