package apero-core

  1. Overview
  2. Docs

Source file key_value.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
open Ordered

module KeyValueF = struct  
  
  module type S = sig 
 
    module Key : Ordered.S      
    module Value : Ordered.S      
    
    module Map : (module type of Map.Make(Key))

    include Ordered.S with type t = Key.t * Value.t    

    val make : Key.t -> Value.t -> t 
    val key : t -> Key.t 
    val value : t -> Value.t
    
  end

  module Make 
    (K : Comparable)
    (V : Comparable) = struct 

    module Key = Ordered.Make(K)
    module Value = Ordered.Make(V)

    module Map = Map.Make(Key)    

    module C = struct 
      type t = Key.t * Value.t
      let compare (k1,v1) (k2,v2) = match (Key.compare k1 k2, Value.compare v1 v2) with 
      | (0, 0) -> 0
      | (a, _) -> a 
      let equal (k1,v1) (k2,v2) = Key.equal k1 k2 && Value.equal v1 v2
    end
    
    include Ordered.Make (C) 

    let make k v = (k, v)
    let key (k, _) = k
    let value (_, v) = v    
    
  end
end