type !'a with_pos = {
pos : int;
data : 'a;
}
val with_pos : 'a list -> 'a with_pos list
type (!'l, !'r, !'diff) mismatch =
| Name of {
pos : int;
got : string;
expected : string;
types_match : bool;
}
| Type of {
pos : int;
got : 'l;
expected : 'r;
reason : 'diff;
}
type (!'l, !'r, !'diff) change =
| Change of ('l, 'r, 'diff) mismatch
| Swap of {
pos : int * int;
first : string;
last : string;
}
| Move of {
name : string;
got : int;
expected : int;
}
| Insert of {
pos : int;
insert : 'r;
}
| Delete of {
pos : int;
delete : 'l;
}
module Define (D : sig ... end) : sig ... end