For_testing.SvarYou can think of an Svar.t as like an Ivar.t whose purpose is to allow us to implement of_svar below.
(The difference between Svar and Ivar is that the former is synchronous. That is, when fill_if_empty is called, it will directly call all of the handlers rather than scheduling that they be called later. This semantics can be confusing to work with in large-scale programs, as it means the control flow of your application hops around a lot more. However, it does mean that you don't need a scheduler, so it's easier to implement.)