2013-05-16 46 views
14

Tôi đang sử dụng gói FSNotify để xem hệ thống tệp của mình để thay đổi tệp đánh dấu, vì vậy tôi có thể tự động chạy chúng thông qua Pandoc. Tuy nhiên, tôi gặp sự cố khi yêu cầu người quản lý thoát ra độc đáo.Giám sát hệ thống tệp bằng Haskell

Khi đứng, mã của tôi được dựa trên 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 

Khi tôi sử dụng runhaskell, chương trình hoạt động hoàn hảo, nhưng nếu tôi biên dịch nó vào một thực thi (sử dụng ghc --make), khi tôi nhấn enter, thiết bị đầu cuối của tôi trở nên không phản hồi. Tôi đang biên dịch này trên Windows 7 64-bit.

EDIT: Completed code. Vâng, không hoàn toàn hoàn thành - vẫn còn nhiều hơn tôi muốn làm với điều này - nhưng làm việc.

Trả lời

22

Bất cứ khi nào tôi nhìn thấy câu hỏi về biểu mẫu "hoạt động trong GHCi, bị treo khi được biên soạn", tôi tự nghĩ "bạn cần thời gian chạy luồng".

Thử biên dịch lại với -threaded và xem điều đó có hữu ích không.

(GHCi được biên soạn với cờ này, điều này giải thích sự khác biệt. Tôi nhớ có một số khác biệt trong cách chức năng bên ngoài gọi công việc phụ thuộc vào việc bạn sử dụng thời gian chạy luồng hay không ...)

+2

Cảm ơn, làm việc như một nét duyên dáng - một khi tôi nhận ra GHC đã không xây dựng lại tệp thực thi của tôi vì tôi đã không thay đổi tệp nguồn, chỉ cần cờ trình biên dịch: P. –

Các vấn đề liên quan