There are a few ways of reaching into records that each have their own advantages and drawbacks. I keep reevaluating these methods every time I want to reach into a record so I'm writing down the cons for each method so I can remember them later. Most of these methods will be in the context of storing multiple effects, because that is the most common reason for me to want to reach into a record without caring about the record type.
The simplest way of reaching into a record is to use a Has*** typeclass. For example if I have an effectful
record of functions UserRepo m, then a typeclass to reach into an arbitrary record and pull out a UserRepo m would