How to run a Haskell program endlessly using only Haskell?

947 Views Asked by At

I have small program that need to be executed every 5 minutes.

For now, I have shell script that perform that task, but I want to provide for user ability to run it without additional scripts via key in CLI.

What is the best way to achieve this?

1

There are 1 best solutions below

9
On BEST ANSWER

I presume you'll want something like that (more or less pseudocode):

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

If you need to pass some more complex data from the input thread to the processing thread, MVars or TVars could be a better choice than IORefs.