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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
open! Import
include Base.String
module Stable = struct
module V1 = struct
module T = struct
include Base.String
type t = string [@@deriving bin_io, stable_witness]
end
include T
let to_string = Fn.id
let of_string = Fn.id
include Comparable.Stable.V1.With_stable_witness.Make (T)
include Hashable.Stable.V1.With_stable_witness.Make (T)
end
end
module Caseless = struct
module T = struct
include Caseless
type t = string [@@deriving bin_io]
end
include T
include Comparable.Make_binable_using_comparator (T)
include Hashable.Make_binable (T)
end
type t = string [@@deriving typerep]
include
Identifiable.Extend
(struct
include Base.String
let hashable = Stable.V1.hashable
end)
(struct
type t = string [@@deriving bin_io]
end)
include Comparable.Validate (Base.String)
include Hexdump.Of_indexable (struct
type t = string
let length = length
let get = get
end)
let quickcheck_generator = Base_quickcheck.Generator.string
let quickcheck_observer = Base_quickcheck.Observer.string
let quickcheck_shrinker = Base_quickcheck.Shrinker.string
let gen_nonempty = Base_quickcheck.Generator.string_non_empty
let gen' = Base_quickcheck.Generator.string_of
let gen_nonempty' = Base_quickcheck.Generator.string_non_empty_of
let gen_with_length length chars =
Base_quickcheck.Generator.string_with_length_of chars ~length
;;
let take_while t ~f =
match lfindi t ~f:(fun _ elt -> not (f elt)) with
| None -> t
| Some i -> sub t ~pos:0 ~len:i
;;
let rtake_while t ~f =
match rfindi t ~f:(fun _ elt -> not (f elt)) with
| None -> t
| Some i -> sub t ~pos:(i + 1) ~len:(length t - i - 1)
;;
(** See {!Array.normalize} for the following 4 functions. *)
let normalize t i = Ordered_collection_common.normalize ~length_fun:length t i
let slice t start stop =
Ordered_collection_common.slice ~length_fun:length ~sub_fun:sub t start stop
;;
let nget x i =
let module String = Base.String in
x.[normalize x i]
;;