anchor.diff:                  JSEngine.makeWeak(pointer, cb)
                   ()
       member this.Pointer = pointer
  -    static member (++) (func: JSValue2, args: JSValue2 list) =
  +    static member ( *@ ) (func: JSValue2, args: JSValue2 list) =
           match func.Pointer with
               | Function f ->
                 let pointer_args = List.map (fun (el:JSValue2) -> el.Pointer) args
                 new JSValue2(f pointer_args)
               | _ -> failwith "cannot apply a non-function"
   
  -    static member (+++) (o: JSValue2, property: string) =
  +    static member ( +> ) (o: JSValue2, property: string) =
           match o.Pointer with
               | Object ->
                 let r = JSEngine.getProperty(JSUtils.context, o.Pointer, property)
  
positive.code:       // TODO get rid of float, is this even useful?
        project = project_array ty }
  
  let list ty=
      { embed = embed_ienumerable ;
        project = project_list ty}
  
  // let func =
  //     { embed = fst << embed_func ;
  
negative.code: 
      elif ty.IsGenericType && ty.GetGenericTypeDefinition() = typedefof<list<_>> then
          let el_ty = ty.GetGenericArguments().[0]
          (project_list el_ty x) |> box
  
      elif ty.IsArray then
          // GetMethod.MageGeneric.Invoke
  