Daniel Spiewak on gitter
Think about the closing action of a bracket. I'll use
IO
andResource
here as the archetypical examples, but Stream is also a very good exemplar, and obviously all of the cats-effect implementors have IO-like semantics in this regard.
So the closing action of a bracket with IO will be sequenced after the result is produced (or an error, or cancelation). Thus, imagine a chain like
fa1 *> fa2 *> fa3
. If fa1 is created by bracket, then the finalizer will be sequenced before fa2. Thus, associating to the left over bind.