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
type 'a t = { start : 'a; end_ : 'a }
let both_true = { start = true; end_ = true }
let both_false = { start = false; end_ = false }
let make start end_ = { start; end_ }
let map f line = { start = f line.start; end_ = f line.end_ }
let sum line = line.start +. line.end_
let map2 f line1 line2 =
{ start = f line1.start line2.start; end_ = f line1.end_ line2.end_ }
let compare cmp a b =
let cmp_start = cmp a.start b.start in
if cmp_start <> 0 then cmp_start else cmp a.end_ b.end_
let equal eq a b = eq a.start b.start && eq a.end_ b.end_
let to_string f line =
Printf.sprintf "{ start: %s; end: %s }" (f line.start) (f line.end_)
let pp f fmt line =
Format.fprintf fmt "{ start: %a; end: %a }" f line.start f line.end_