Как бесконечно запускать программу Haskell, используя только Haskell?
У меня есть небольшая программа, которую нужно выполнять каждые 5 минут.
На данный момент у меня есть скрипт оболочки, который выполняет эту задачу, но я хочу предоставить пользователю возможность запускать его без дополнительных скриптов с помощью ключа в CLI.
Каков наилучший способ достичь этого?
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
Если вам нужно передать некоторые более сложные данные из входного потока в поток обработки,
MVar
s илиTVar
s может быть лучшим выбором, чемIORef
s.