-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Cross platform library for file change notification. -- -- Cross platform library for file creation, modification, and deletion -- notification. This library builds upon existing libraries for -- platform-specific Windows, Mac, and Linux filesystem event -- notification. @package fsnotify @version 0.2 -- | NOTE: This library does not currently report changes made to -- directories, only files within watched directories. -- -- Minimal example: -- --
-- {-# LANGUAGE OverloadedStrings #-} -- for FilePath literals
--
-- import System.FSNotify
-- import Control.Concurrent (threadDelay)
-- import Control.Monad (forever)
--
-- main =
-- withManager $ \mgr -> do
-- -- start a watching job (in the background)
-- watchDir
-- mgr -- manager
-- "." -- directory to watch
-- (const True) -- predicate
-- print -- action
--
-- -- sleep forever (until interrupted)
-- forever $ threadDelay 1000000
--
module System.FSNotify
-- | A file event reported by a file watcher. Each event contains the
-- canonical path for the file and a timestamp guaranteed to be after the
-- event occurred (timestamps represent current time when FSEvents
-- receives it from the OS and/or platform-specific Haskell modules).
data Event
Added :: FilePath -> UTCTime -> Event
Modified :: FilePath -> UTCTime -> Event
Removed :: FilePath -> UTCTime -> Event
type EventChannel = Chan Event
-- | Helper for extracting the time associated with an event.
eventTime :: Event -> UTCTime
-- | Helper for extracting the path associated with an event.
eventPath :: Event -> FilePath
-- | An action to be performed in response to an event.
type Action = Event -> IO ()
-- | A predicate used to determine whether to act on an event.
type ActionPredicate = Event -> Bool
-- | Watch manager. You need one in order to create watching jobs.
data WatchManager
-- | Perform an IO action with a WatchManager in place. Tear down the
-- WatchManager after the action is complete.
withManager :: (WatchManager -> IO a) -> IO a
-- | Start a file watch manager. Directories can only be watched when they
-- are managed by a started watch watch manager. When finished watching.
-- you must release resources via stopManager. It is preferrable
-- if possible to use withManager to handle this automatically.
startManager :: IO WatchManager
-- | Stop a file watch manager. Stopping a watch manager will immediately
-- stop watching for files and free resources.
stopManager :: WatchManager -> IO ()
-- | Default configuration
--
--
-- compass :: WatchManager -> FilePath -> IO ()
-- compass man dir = do
-- putStrLn $ "compass " ++ encodeString dir
-- treeExtExists man dir "scss" $ fp ->
-- when ("deploy" notElem splitDirectories fp) $ do
-- let d = encodeString $ head (splitDirectories rel)
-- system "cd " ++ d ++ "&& bundle exec compass compile"
-- return ()
--
module System.FSNotify.Devel
-- | In the given directory tree, watch for any events for files with the
-- given file extension
treeExtAny :: WatchManager -> FilePath -> Text -> (FilePath -> IO ()) -> IO StopListening
-- | In the given directory tree, watch for any Added and
-- Modified events (but ignore Removed events) for files
-- with the given file extension
treeExtExists :: WatchManager -> FilePath -> Text -> (FilePath -> IO ()) -> IO StopListening
-- | Turn a FilePath callback into an Event callback that
-- ignores the Event type and timestamp
doAllEvents :: Monad m => (FilePath -> m ()) -> Event -> m ()
-- | Turn a FilePath predicate into an Event predicate that
-- accepts any event types
allEvents :: (FilePath -> Bool) -> (Event -> Bool)
-- | Turn a FilePath predicate into an Event predicate that
-- accepts only Added and Modified event types
existsEvents :: (FilePath -> Bool) -> (Event -> Bool)