Как бесконечно запускать программу Haskell, используя только Haskell?


У меня есть небольшая программа, которую нужно выполнять каждые 5 минут.

На данный момент у меня есть скрипт оболочки, который выполняет эту задачу, но я хочу предоставить пользователю возможность запускать его без дополнительных скриптов с помощью ключа в CLI.

Каков наилучший способ достичь этого?

1 7

1 ответ:

Я предполагаю, что вы захотите что-то вроде этого (более или менее псевдокод):

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

Если вам нужно передать некоторые более сложные данные из входного потока в поток обработки, MVars или TVars может быть лучшим выбором, чем IORef s.