anchor.diff:      let register_value (name, value) =
           JSEngine.registerValue(JSUtils.context, name, value)
       List.iter register_value l
  +
  +
  +type Signature =
  +    Sign of (System.Type[] * System.Type[])
  +
  +let create_signature (e:Expr) =
  +    let gmi, args =
  +        match e with
  +            | DerivedPatterns.Lambdas(_,Patterns.Call(_,mi,args)) -> mi.GetGenericMethodDefinition(), args
  +            | _ -> failwith "!"
  +    let arg_types = gmi.GetParameters() |> Array.map (fun (el:ParameterInfo) -> el.ParameterType)
  +    let ret_types = gmi.ReturnType
  +    if FSharpType.IsTuple(ret_types) then
  +        (Sign(arg_types, FSharpType.GetTupleElements(gmi.ReturnType)))
  +    else (Sign(arg_types, [|ret_types|]))
  
positive.code: open Microsoft.FSharp.Reflection
  open System.Collections
  open System
  
  type JSValue = nativeint
  exception JSException of JSValue
  
negative.code:         with
              | exn -> JSEngine.throwException(JSUtils.context, embed exn)
  
      JSEngine.makeFunction(JSUtils.context, new JSEngine.FSharpFunction(f))
  
  and project_func ty (f:JSValue list -> JSValue) : obj =
      let range = FSharpType.GetFunctionElements ty |> snd
  