anchor.diff:  type SnapState<'T> =
       | Forever of 'T
       | Obsolete
  -    | Promised of JQueue<'T -> unit>
       | Ready of 'T * JQueue<unit -> unit>
       | Waiting of JQueue<'T -> unit> * JQueue<unit -> unit>
   
  
positive.code: 
      let MarkForever sn v =
          match sn.State with
          | Promised q | Waiting (q, _) ->
              sn.State <- Forever v
              JQueue.Iter (fun k -> k v) q
          | _ -> ()
  
      let MarkObsolete sn =
          match sn.State with
          | Forever _ | Obsolete | Promised _ -> ()
          | Ready (_, ks) | Waiting (_, ks) ->
              sn.State <- Obsolete
              JQueue.Iter (fun k -> k ()) ks
  
negative.code: 
  State transitions:
  
      Waiting         -> Forever      // MarkForever
      Waiting         -> Obsolete     // MarkObsolete
      Waiting         -> Ready        // MarkReady
  