A method for acquiring a scarce resource, providing the means of freeing
it when no longer needed. This data type provides
Functor/Applicative/Monad instances for composing different resources
together. You can allocate these resources using either the bracket
pattern (via with) or using ResourceT (via allocateAcquire).
This concept was originally introduced by Gabriel Gonzalez and described at: http://www.haskellforall.com/2013/06/the-resource-applicative.html. The implementation in this package is slightly different, due to taking a different approach to async exception safety.