Purpose
The correct teardown of a system becomes a crucial matter when running applications through GHCi while doing REPL driven development; this library provides a stable API to manage the cleanup process of resources your application allocates when it runs for the first time.
This library will:
Make execution of cleanup
IO ()
sub-routines (e.g.Database.PostgreSQL.Simple.close
) idempotent. This helps avoiding runtime exception of the "already closed resource" nature.When composing with other cleanup
IO ()
sub-routines, one can use the(>>)
operator, but what happens if the sub-routine throws an exception? Likely other resource cleanup sub-routine is not going to be executed because of a runtime exception. This library allows the composition of multiple cleanupIO ()
sub-routines, while also ensuring that despite failures every resource cleanup is executed.All teardown sub-routines use a description argument to keep track of what is being cleaned up; By requiring this description, we avoid confusion around what is going on when shutting down an application. This library makes this documentation a /required/ argument when building teardown sub-routines, thus helping trace-ability.
Keeps track how much time every teardown sub-routine takes, allowing the developer to learn which parts of the teardown procedure are slow and adequately address those on development time (e.g., Faster reload => Faster development feedback loops).
By using this library, you may implement without much effort a good, reliable and transparent strategy for application resource teardown sub-routines.