anchor.diff:    
     let univs_opening, annotated_univ_names = SS.univ_var_opening ed.univs in
   
  -  let env = Env.push_univ_vars env0 annotated_univ_names in
  +  let env_uvs = Env.push_univ_vars env0 annotated_univ_names in
     
     //open the effect signature and typecheck it
     //TODO: where do we check that the final type is Effect?
  -  let signature, _ = tc_trivial_guard env (SS.subst univs_opening ed.signature) in
  +  let signature0 = ed.signature in  //save the unannotated signature -- will be used later to get a fresh instance when typechecking bind etc.
  +  let signature, _ = tc_trivial_guard env_uvs (SS.subst univs_opening ed.signature) in
     let ed = { ed with signature = signature } in
  +
  +  //add ed.signature to the environment so that its universe is not generalized until we are done
  +  let env = Env.push_bv env_uvs (S.new_bv None ed.signature) in
   
     //open effect combinators w.r.t. univs_opening
     //we expect other fields to be unset, in particular we will override them
  
positive.code:     let indices = uvars |> List.map fst |> List.map SS.compress in  //indices are now indices for M.return in Gamma = bs
      let embedded_indices = EMB.embed (EMB.e_list EMB.e_any) indices Range.dummyRange None EMB.id_norm_cb in
  
      let return_wp = U.abs (SS.close_binders bs) (SS.close bs embedded_indices) None in
  
      if Env.debug env <| Options.Other "LayeredEffects" then
        BU.print1 "return_wp: %s\n" (Print.term_to_string return_wp);
  
      return_repr, return_wp in
    
    failwith "That's it for now"
  
  
negative.code:   in
  
    //typecheck repr
  
    //save the unannotated repr -- will be used later to get a fresh instance when typechecking bind etc.
    let repr0 = ed.repr in
    
    let tc_repr repr bs =
      //repr should have the type a:Type -> .. indices .. -> Type
      let expected_repr_type =
        let t, u = U.type_u () in
        U.arrow bs (S.mk_Total' t (Some u)) in
  
      let repr = tc_check_trivial_guard env repr expected_repr_type in
  
      if Env.debug env <| Options.Other "LayeredEffects" then
        BU.print2 "Checked repr: %s against expected repr type: %s\n"
          (Print.term_to_string repr) (Print.term_to_string expected_repr_type);
      repr in
    
    let repr = tc_repr ed.repr bs in  //typechecked repr w.r.t. bs binders
  
    //typecheck return
    let return_repr, return_wp =
      //return should have the type a:Type -> x:a -> repr a ?u1 ... ?un for n indices
  