I’m not experienced enough with all the functional stuff, but I have a gut feeling that having a requirement for an execution context, they shouldn’t pass Monad laws. It’s a “side” property. Either you capture it at the moment of creation, or you can’t make it self-contained.