I noticed that it would be advantageous to have signatures(that allows the user to set a value type) in Ocaml but I’m not sure how produce such a thing. I played around a bit and arrived at the code below but it feels more like a hack than a real solution. Any comments or guidance?
module type MySig =
sig
type t
type k (*nice to expose this type and set its type-value when used*)
val createKey: k -> t
val string_of_key: t -> string
val compare: t -> t -> int
end
module MyInt:(MySig with type k = int) =
struct
type t = int
type k = t (*feels kind of hackish here*)
let createKey key = key
let string_of_key key = string_of_int key
let compare = compare
end
module MyStr:(MySig with type k = string) =
struct
type t = string
type k = t (*feels kind of hackish here*)
let createKey key = key
let string_of_key key = key
let compare = compare
end
module MyIntMap = Map.Make(MyInt)
let myInt =
MyIntMap.empty
|> MyIntMap.add (MyInt.createKey 4143) "G4143"
|> MyIntMap.add (MyInt.createKey 8888) "me"
|> MyIntMap.add (MyInt.createKey 7777) "you"
|> MyIntMap.iter
(fun key value -> print_endline (MyInt.string_of_key key ^ "=>" ^ value))
let () = List.iter (fun _ -> print_newline()) [1;2;]
module MyStrMap = Map.Make(MyStr)
let myStr =
MyStrMap.empty
|> MyStrMap.add (MyStr.createKey "4143") "G4143"
|> MyStrMap.add (MyStr.createKey "8888") "me"
|> MyStrMap.add (MyStr.createKey "7777") "you"
|> MyStrMap.iter
(fun key value -> print_endline (MyStr.string_of_key key ^ "=>" ^ value))