如何仅使用Haskell无休止地运行Haskell程序?

时间:2015-10-13 11:40:12

标签: haskell infinite-loop periodic-task periodic-processing

我的小程序需要每5分钟执行一次。

目前,我有执行该任务的shell脚本,但我希望用户能够通过CLI中的密钥在没有其他脚本的情况下运行它。

实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:9)

我认为你会想要那样的东西(或多或少的伪代码):

import Control.Concurrent (forkIO, threadDelay)
import Data.IORef
import Control.Monad (forever)

main = do
    var <- newIORef 5000
    forkIO (forever $ process var)
    forever $ readInput var

process var = do
    doActualProcessing

    interval <- readIORef var
    _ <- threadDelay interval

readInput var = do
    newInterval <- readLn
    writeIORef var newInterval

如果您需要将一些更复杂的数据从输入线程传递到处理线程,MVarTVar可能是比IORef更好的选择。