2013-05-16 43 views
14

我使用FSNotify软件包来观察我的文件系统是否有对降价文件的更改,所以我可以通过Pandoc自动运行它们。但是,我很难让经理很好地退出。使用Haskell监控文件系统

既然这样,我的代码是基于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 

当我使用runhaskell,该方案完美地工作,但如果我把它编译成一个可执行文件(使用ghc --make),当我按下回车,我的终端变得没有反应。我正在编译Windows 7 64位。

编辑:Completed code。好吧,没有完全完成 - 我还想做更多的工作 - 但工作。

回答

22

每当我看到一个表格“在GHCi中工作,在编译时挂起”的问题,我想我自己“你需要线程运行时”。

尝试使用-threaded重新编译,看看是否有帮助。

(GHCI编译使用此标志,这也解释了区别。我不记得有如何外部功能取决于是否使用线程运行时或不要求工作有些区别......)

+2

谢谢,工作就像一个魅力 - 一旦我意识到GHC不重建我的可执行文件,因为我没有改变源文件,只是编译器标志:P。 –