module Control.Monad.Operational.Wait where

import           Control.Concurrent        (threadDelay)
import           Control.Monad.Operational

-- Int is the time in microseconds
data WaitI a where
  WaitI :: Int -> WaitI ()

wait :: Int -> ProgramT WaitI m ()
wait i = singleton (WaitI i)

interpretWaitIO :: WaitI a -> IO a
interpretWaitIO (WaitI i) = threadDelay i

interpretWaitIgnore :: Applicative m => WaitI a -> m a
interpretWaitIgnore (WaitI _) = pure ()