let try_to_pass w =     match w.color with     | `Green -> return ()     | `Red ->       begin match Lwt.state w.lwt_t with       | Lwt.Sleep -> ()       | Lwt.Return () | Lwt.Fail _ ->         (* we need to renew the “task” *)         let t, u = Lwt.task () in         w.lwt_t <- t;         w.lwt_u <- u;       end;       wrap_deferred ~on_exn:(fun e -> e) (fun () -> w.lwt_t)       >>< function       | `Error Lwt.Canceled -> return ()       | `Error other -> failwith "BUG: THIS SHOULD NOT HAPPEN"       | `Ok () -> return ()