Мониторинг файловой системы с помощью Haskell - программирование
Подтвердить что ты не робот

Мониторинг файловой системы с помощью Haskell

Я использую пакет FSNotify для просмотра моей файловой системы для изменений в файлах разметки, поэтому я могу запустить их через Pandoc автоматически. Тем не менее, у меня возникли проблемы с тем, чтобы менеджер с успехом вышел.

В своем роде мой код основан на использовании Yesod одного и того же пакета:

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), когда я нажимаю enter, мой терминал перестает отвечать на запросы. Я компилирую это на 64-разрядной версии Windows 7.

EDIT: Завершенный код. Ну, не совсем законченный - там еще больше я хочу сделать с этим - но работаю.

4b9b3361

Ответ 1

Всякий раз, когда я вижу вопрос о форме "работает в GHCi, зависает при компиляции", я думаю, что "вам нужна потоковая среда выполнения".

Попробуйте перекомпилировать с помощью -threaded и посмотрите, помогает ли это.

(GHCi скомпилирован с этим флагом, что объясняет разницу. Я действительно помню там какую-то разницу в том, как работают вызовы внешних функций в зависимости от того, используете ли вы потоковое время выполнения или нет...)