Gerd's reply covers most of the important points. I just wanted to add:

On 16 February 2015 at 00:06, Jean Saint-Remy <jeansaintremy@yahoo.com> wrote:
I could not declare the fields for example as a polymorphic tuple for instance: "type idref = { mutable 'a * 'b -> 'a }" nor "type idref = { mutable 'a. 'b -> 'a }". The latter is just nonsense, the 'b is undefined. But we could have a two field record by just repeating the type definitions. "let idref = { mutable 'a. 'a -> 'a; mutable 'b. 'b -> 'b }". The polymorphic type does not have any restriction, it appears we could have any fundamental type we wanted. The type 'a variable must be repeated, it is not enough to say "type idref = { mutable 'a. -> 'a };;" Is it correct then to read the declaration in this way: the type 'a polymorphic type as a polymorphic variable of type 'a. I know it sounds redundant, but that is how I am reading the syntax.

All the pieces of record syntax in this quoted paragraph are missing a field name. Where you say things like "type idref = { mutable 'a * 'b -> 'a }", you probably mean something like "type idref = { mutable fst : 'a 'b . 'a * 'b -> 'a }" -- notice the name of the field, followed by the colon, which always comes before the type, including any 'a . -style variable bindings it might start with.