The type parameters inferred for this value are not stable under the erasure of type abbreviations. This is due to the use ...

The type parameters inferred for this value are not stable under the erasure of type abbreviations. This is due to the use of type abbreviations which drop or reorder type parameters, e.g. 
	type taggedInt<'a> = int or
	type swap<'a,'b> = 'b * 'a.
Consider declaring the type parameters for this value explicitly, e.g.
	let f<'a,'b> ((x,y) : swap<'b,'a>) : swap<'a,'b> = (y,x).