Quick actions

cmd+k|ctrl+k

Navigation

Languages

setInterval

Snippet info

Language

Haskell

Visibility

public

Author

homam

Created

2015-07-26T06:40:52Z

Updated

2015-07-30T12:04:51Z

import SetInterval
import SetIntervalT
import Control.Concurrent
import Control.Exception
import Control.Monad.State

sprint :: (Show b) => MVar () -> b -> IO ()
sprint mvar b = do
    putMVar mvar ()
    print b
    takeMVar mvar

main :: IO ()
main = do 
    logMVar <- newEmptyMVar
    mvar <- newEmptyMVar
    
    forkIO $ setInterval 1000 (1, 1) $
        \ (x, y) -> do 
            sprint logMVar $ "fib1 " ++ show x
            when (x > 100) $ putMVar mvar () -- exit the app at some point!
            return (y, x + y)
        
    forkIO $ setIntervalT 1000 (1, 1) 
        (do 
            (x, y) <- get
            lift $ sprint logMVar $ "fib2 " ++ show x
            put (y, x + y)
        )
        
    takeMVar mvar
    
INFO