a: new<T>(x: T)=>T[];// ok, instantiation of N is a subtype of M, T is number
a2: new<T>(x: T)=>string[];// ok
a3: new<T>(x: T)=>T;// ok since Base returns void
a4: new<T,U>(x: T,y: U)=>T;// ok, instantiation of N is a subtype of M, T is string, U is number
a5: new<T,U>(x:(arg: T)=>U)=>T;// ok, U is in a parameter position so inferences can be made
a6: new<TextendsBase,UextendsDerived>(x:(arg: T)=>U)=>T;// ok, same as a5 but with object type hierarchy
a7: new<TextendsBase,UextendsDerived>(x:(arg: T)=>U)=>(r: T)=>U;// ok
a8: new<TextendsBase,UextendsDerived>(x:(arg: T)=>U,y:(arg2: T)=>U)=>(r: T)=>U;// ok
a9: new<TextendsBase,UextendsDerived>(x:(arg: T)=>U,y:(arg2:{foo: string;bing: number})=>U)=>(r: T)=>U;// ok, same as a8 with compatible object literal
a10: new<TextendsDerived>(...x: T[])=>T;// ok
a11: new<TextendsBase>(x: T,y: T)=>T;// ok
a12: new<TextendsArray<Base>>(x: Array<Base>,y: T)=>Array<Derived>;// ok, less specific parameter type