/
FileSystemEvent.hs
43 lines (36 loc) · 1.47 KB
/
FileSystemEvent.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
{-# LANGUAGE CPP #-}
-- Report all events recursively under the paths provided as arguments
module Main (main) where
import Control.Monad.IO.Class (MonadIO)
import Data.Function ((&))
import Data.Word (Word8)
import System.Environment (getArgs)
import Streamly.Data.Array (Array)
import qualified Data.List.NonEmpty as NonEmpty
import qualified Streamly.Data.Array as Array
import qualified Streamly.Data.Fold as Fold
import qualified Streamly.Data.Stream as Stream
import qualified Streamly.Unicode.Stream as Unicode
#if darwin_HOST_OS
import qualified Streamly.Internal.FileSystem.Event.Darwin as Event
#elif linux_HOST_OS
import qualified Streamly.Internal.FileSystem.Event.Linux as Event
#elif mingw32_HOST_OS
import qualified Streamly.Internal.FileSystem.Event.Windows as Event
#else
#error "FS Events not supported on this platform"
#endif
-------------------------------------------------------------------------------
-- Utilities
-------------------------------------------------------------------------------
toUtf8 :: MonadIO m => String -> m (Array Word8)
toUtf8 s = Stream.fold Array.write (Unicode.encodeUtf8' $ Stream.fromList s)
-------------------------------------------------------------------------------
-- Main
-------------------------------------------------------------------------------
main :: IO ()
main = do
args <- getArgs
paths <- mapM toUtf8 args
Event.watch (NonEmpty.fromList paths)
& Stream.fold (Fold.drainMapM (putStrLn . Event.showEvent))