Because of #4, which effectively limits finalizers to make synchronous requests only, finalizers that get into the waiting state should not be supported. While I doubt that this is possible on a syntactical level, a dynamic check for the waiting state in debug builds should be simple to implement.
There are other sitations in which Moms are not meant to be asynchronous (waiting for something). I see two options?
A new type of Mom is defined which can not represent the Waiting state. This would require to duplicate a lot of functions and probably may not be usable in a transparent way as long F# does not implement traits (or we need SRTP trickery to implement that). The advantage would be that the compiler could verify if the Moms are synchronous or asynchrous.
We could build an function that virtualizes an Mom in DEBUG builds and throws an exception if a Waiting state appears.
Because of #4, which effectively limits finalizers to make synchronous requests only, finalizers that get into the waiting state should not be supported. While I doubt that this is possible on a syntactical level, a dynamic check for the waiting state in debug builds should be simple to implement.