File: count.ml

package info (click to toggle)
hevea 2.36-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,780 kB
  • sloc: ml: 19,453; sh: 503; makefile: 311; ansic: 132
file content (31 lines) | stat: -rw-r--r-- 1,123 bytes parent folder | download | duplicates (6)
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
(***********************************************************************)
(*                                                                     *)
(*                          HEVEA                                      *)
(*                                                                     *)
(*  Luc Maranget, projet Moscova, INRIA Rocquencourt                   *)
(*                                                                     *)
(*  Copyright 2012 Institut National de Recherche en Informatique et   *)
(*  Automatique.  Distributed only by permission.                      *)
(*                                                                     *)
(***********************************************************************)

(* Map extension for counting occurrences *)

module type S = sig
  type key
  type count
  val empty : count
  val incr : key -> count -> count
  val fold : (key -> int -> 'b -> 'b) -> count -> 'b -> 'b
end

module Make(K:Map.OrderedType) = struct

  include Map.Make(K)

  type count = int t

  let incr k m =
    let v = try find k m with Not_found -> 0 in
    add k (v+1) m
end