Hi there, I found there are some references Module types / aliases, Type aliases for extensible types and Using module type of with module aliases in OCaml 4.07.* discussed before, but seems not suits for me.
I am writing a project with multiple modules, let’s say Temp, A and B
In module Temp I declared as below
(* temp.ml *)
open core
type t = int[@@deriving sexp, compare, hash]
include Comparable.Make (Int)
Then I declared a set in module A
(* a.ml *)
module TempSet = Set.Make(Temp)
Now I want to use TempSet module in B as below
(* b.ml *)
let foo (s : A.TempSet.t) = A.TempSet.iter s ~f:(fun x -> printf "%d " x)
However, now I get the compiler error in the lambda function as.
This expression has type A.TempSet.Elt.t but an expression was expected of type int
Since I generate TempSet based on int, so TempSet.Elt.t should be Temp.t , but why the type is inconsistent here?
Also, I found that if I write this function in module A, the error changes to
This expression has type A.Temp.t but an expression was expected of type int
Though still not working, but it makes more sense. So I guess this is about module namespace or type alias, is there anything I am missing?
Thank you!