anchor.diff:  type ProvidedSymbolType(kind: SymbolKind, args: Type list) =
       inherit Type()
   
  +    let rec isEquivalentTo (thisTy: Type) (otherTy: Type) =
  +        match thisTy, otherTy with
  +        | (:? ProvidedSymbolType as thisTy), (:? ProvidedSymbolType as thatTy) -> (thisTy.Kind,thisTy.Args) = (thatTy.Kind, thatTy.Args)
  +        | (:? ProvidedSymbolType as thisTy), otherTy | otherTy, (:? ProvidedSymbolType as thisTy) ->
  +            match thisTy.Kind, thisTy.Args with
  +            | SymbolKind.SDArray, [ty] | SymbolKind.Array _, [ty] when otherTy.IsArray-> ty.Equals(otherTy.GetElementType())
  +            | SymbolKind.ByRef, [ty] when otherTy.IsByRef -> ty.Equals(otherTy.GetElementType())
  +            | SymbolKind.Pointer, [ty] when otherTy.IsPointer -> ty.Equals(otherTy.GetElementType())
  +            | SymbolKind.Generic baseTy, args -> otherTy.IsGenericType && isEquivalentTo baseTy (otherTy.GetGenericTypeDefinition()) && Seq.forall2 isEquivalentTo args (otherTy.GetGenericArguments())
  +            | _ -> false
  +        | a, b -> a.Equals b
  +
  +
       static member convType (parameters: Type list) (ty:Type) = 
           if ty.IsGenericType then 
               let args = Array.map (ProvidedSymbolType.convType parameters) (ty.GetGenericArguments())
  
positive.code:                     [| for v in parameterVars -> Quotations.Expr.Var v |]
                  match pcinfo.GetBaseConstructorCallInternal true with
                  | None ->  
                      let cinfo = ptd.BaseType.GetConstructor(BindingFlags.Public ||| BindingFlags.NonPublic ||| BindingFlags.Instance, null, [| |], null)
                      ilg.Emit(OpCodes.Call,cinfo)
                  | Some f -> 
                      let (cinfo,argExprs) = f (Array.toList parameters)
                      for argExpr in argExprs do 
                          emitExpr (ilg, locals, parameterVars) ExpectedStackState.Value argExpr
  
negative.code:             if otherTy.IsGenericType then
                  let otherGtd = otherTy.GetGenericTypeDefinition()
                  let otherArgs = otherTy.GetGenericArguments()
                  let yes = gtd.Equals(otherGtd) && Seq.forall2 isEquivalentTo args otherArgs
                  yes
                  else
                      base.IsAssignableFrom(otherTy)
  