# Problems of unmatched types between mli and ml

This my first topic here please if I commit a mistake explain me
Here is the code I try to compile :

module type OrderedStringFloatFloatFloat =
sig
type t
val compare : t -> t -> int
end

module type Tour =
sig
(
* une ville )
type city
(
* map contenant pour noeud le nom des villes et pour transition la distance entre les deux villes reprĂ©sentĂ©es par les noeuds de la map *)
type tour

``````    (** dĂ©finition d'une map vide *)
val empty : tour
(** test de vacuitĂ© d'une map *)
val is_empty : tour -> bool
(** calcul de la distance entre deux villes *)
val distance : city -> city -> float
(** ajout d'une ville dans la map *)
val add_city : city -> tour -> tour
(** ajout d'un chemin pour aller d'une ville A Ă  une ville B *)
end
``````

module OrderedStringFloatFloatFloat =
struct
type t = string * float * float * float

``````    let compare t1 t2 = compare t1 t2
end
``````

module MakeMap (X : OrderedStringFloatFloatFloat) =
struct
type city = X.t
module SetString = Set.Make(String)
module MyMap = Map.Make (OrderedStringFloatFloatFloat)
type tour = int * string * SetString.t * SetString.t MyMap.t

``````	let empty = (0, "", SetString.empty, MyMap.empty)

let is_empty t = t = (0, "", SetString.empty, MyMap.empty)

let distance c1 c2 =
let (_, long1, lat1, _) = c1 in
let (_, long2, lat2, _) = c2 in
sqrt ( (long2 -. long1) ** 2. +. (lat2 -. lat1) ** 2. )

if MyMap.mem c t then t

let next_cities c t = MyMap.find c t

let t1 = add_city c1 t in
let t2 = add_city c2 t1 in
let c1_next = next_cities c1 t2 in
let (s2, _, _, _) = c2 in
let c1_next' = SetString.add s2 c1_next in
let c2_next = next_cities c2 t2 in
let (s1, _, _, _) = c1 in
let c2_next' = SetString.add s1 c2_next in
let t2' = MyMap.add c1 c1_next' t2 in