This library provides several timer and timeout related tools:
Control.Timeout - Execution of a computation with a time limit, aborting
it if the limit is reached before the computation finishes. It is
more-or-less a lifted version of System.Timeout from the base package.
It's good for single use, but it launches a temporary helper thread. If you
want to time-limit actions continuously (e.g. if you're implementing a
network protocol), you should probably use one of the other tools described
below, since they use a single dedicated thread for all the timeouts.
Control.Timer - Managing a timer running in a dedicated thread. The timer
waits for an amount of time you specify, and then runs an action you
specify. You can stop and restart it at any time.
Control.Alarm - Managing an alarm, which is a timer whose action is to
notify your thread when the specified amount of time passes.
Control.Monad.Trans.Timer - A monad transformer for managing a timer
Control.Monad.Trans.Alarm - A monad transformer for managing an alarm
Control.Monad.Trans.Timeout - A monad transformer for running actions
with timeouts, useful for e.g. network protocols where any send and receive
can timeout
Control.Monad.Timeout.Class - A monad typeclass for running actions with
a time limit. Control.Timeout provides a simple trivial for IO (which can
then be used with any MonadIO), and Control.Monad.Trans.Timeout
provides a scalable instance.