如何 运行 一个 Haskell 程序无休止地只使用 Haskell?
How to run a Haskell program endlessly using only Haskell?
我有一个小程序需要每 5 分钟执行一次。
目前,我有 shell 执行该任务的脚本,但我想为用户提供 运行 它的能力,而无需通过 CLI 中的键输入其他脚本。
实现此目标的最佳方法是什么?
我想你会想要类似的东西(或多或少的伪代码):
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
如果您需要将一些更复杂的数据从输入线程传递到处理线程,MVar
s 或 TVar
s 可能是比 IORef
s 更好的选择。
我有一个小程序需要每 5 分钟执行一次。
目前,我有 shell 执行该任务的脚本,但我想为用户提供 运行 它的能力,而无需通过 CLI 中的键输入其他脚本。
实现此目标的最佳方法是什么?
我想你会想要类似的东西(或多或少的伪代码):
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
如果您需要将一些更复杂的数据从输入线程传递到处理线程,MVar
s 或 TVar
s 可能是比 IORef
s 更好的选择。