anchor.diff:  (* ------------------------------------------------------------------------- *)
   
   /// Applies constant to list of arguments, instantiating constant type as needed.
  -let list_mk_icomb cname args = 
  +let list_mk_icomb cname args : Choice<term, exn> = 
       let list_mk_icomb cname args = 
           let atys, _ = nsplit (Choice.get << dest_fun_ty) args (Choice.get <| get_const_type cname)
           let tyin = itlist2 (fun g a -> Choice.get << type_match g (Choice.get <| type_of a)) atys args []
  
positive.code:             return v :: vs
          }
      fun s avoid tys ->
          if length tys = 1 then 
              variant avoid (mk_var(s, hd tys)) |> Choice.map (fun x -> [x])
          else margs 0 s avoid tys
  
  (* ------------------------------------------------------------------------- *)
  
negative.code:         let! mat = type_match uty ty []
          let! con = mk_const(c, mat)
          let! tc = type_of con
          if tc = ty then
              return con
          else
              return! Choice.fail()
      }
      |> Choice.mapError (fun e ->
          nestedFailure e "mk_const: generic type cannot be instantiated")
  