2013-05-16 8 views
14

Używam pakietu FSNotify do oglądania mojego systemu plików w celu zmiany plików oznaczania, tak, że mogę je automatycznie uruchomić przez Pandoc. Mam jednak problem ze złym wyjściem menedżera.Monitorowanie systemu plików za pomocą Haskella

Jak się stoi, mój kod jest oparty na Yesod's use of the same package:

module Main where 

import System.FSNotify 
import Filesystem (getWorkingDirectory) 
import System.Exit 
import Control.Concurrent 

main = do 
    cwd <- getWorkingDirectory 
    putStrLn "Watching current directory, press RETURN to exit." 
    withManager $ \man -> do 
     _ <- forkIO $ do 
      watchTree man cwd (const True) $ \fp -> print fp 
     _ <- getLine 
     exitSuccess 

Gdy używam runhaskell, program działa idealnie, ale gdybym go skompilować do pliku wykonywalnego (z użyciem ghc --make), po naciśnięciu enter mój terminal przestaje reagować. Kompiluję to na 64-bitowym Windows 7.

EDYCJA: Completed code. Cóż, nie do końca ukończone - jest jeszcze coś, co chcę z tym zrobić - ale działa.

Odpowiedz

22

Ilekroć widzę pytanie o formę "działa w GHCi, zawiesza się po kompilacji", myślę sobie "potrzebujesz gwintowanego środowiska wykonawczego".

Spróbuj ponownie skompilować z -threaded i sprawdź, czy to pomaga.

(GHCi jest skompilowany z tą flagą, co wyjaśnia różnicę. Ja pamiętam jest jakaś różnica w jaki sposób zewnętrzny funkcja nazywa pracę w zależności od tego, czy używasz gwintowany czas pracy lub nie ...)

+2

Dzięki, działa jak urok - gdy zdałem sobie sprawę, że GHC nie przebudowuje mojego pliku wykonywalnego, ponieważ nie zmieniłem pliku źródłowego, tylko flagi kompilatora: P. –