clckwrks- A secure, reliable content management system (CMS) and blogging platform

Safe HaskellSafe



this module provides a simple mechanism for adding IO operations to a queue and running them in a single thread. This is useful if the IO operations have side-effects which could collide if run from multiple threads. For example, creating an image thumbnail and storing it on disk, running LaTeX, etc.



data IOThread a b Source #



startIOThread Source #


:: (a -> IO b)

the IO function that does all the work

-> IO (IOThread a b)

a handle to the IOThread

start the IO thread.

killIOThread :: IOThread a b -> IO () Source #

kill the IOThread

WARNING: no attempt is made to wait for the queue to empty... we should probably have safer version that waits for the operations to complete?

ioRequest Source #


:: IOThread a b

handle to the IOThread

-> a

argument to the function in the IOThread

-> IO b

value returned by the function in the IOThread

issue a request to the IO thread and get back the result if the thread function throws an exception ioRequest will rethrow the exception.