anchor.diff:          then let flex, wl = destruct_flex_t this_flex wl in
                begin
                match quasi_pattern env flex with
  -             | None -> giveup env "flex-arrow subtyping, not a quasi pattern" (TProb tp)
  +             | None -> giveup_lit env "flex-arrow subtyping, not a quasi pattern" (TProb tp)
                | Some (flex_bs, flex_t) ->
                  if Env.debug env <| Options.Other "Rel"
                  then BU.print1 "Trying to solve by imitating arrow:%s\n" (string_of_int tp.pid);
  
positive.code:             begin
              match try_match_heuristic env orig wl t1 t2 o with
              | Inl _defer_ok ->
                giveup_or_defer orig "delaying match heuristic"
  
              | Inr (Some wl) ->
                solve env wl
  
negative.code:                     if debug env <| Options.Other "Rel" then BU.print2 "solve_c for %s and %s\n" (c1.effect_name.str) (c2.effect_name.str);
                      match Env.monad_leq env c1.effect_name c2.effect_name with
                      | None ->
                         giveup env (Thunk.mk (fun () -> BU.format2 "incompatible monad ordering: %s </: %s"
                                                (Print.lid_to_string c1.effect_name)
                                                (Print.lid_to_string c2.effect_name))) orig
                      | Some edge ->
                          solve_sub c1 edge c2
                   end
  