Source file main_intf.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
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
open! Core
open! Import

(*_ see [../doc/streamable.mkd] for a high level introdution to this signature *)

(** Functors for serializing and deserializing potentially large values
    incrementally.

    Serializing large values can cause problems

    - bin_prot places size limits on what can be serialized.

    - long-running monolithic (de)serializations block out the rest of the program from
      running, even if we are using a concurrency library like Async.

    Instead, we want to serialize large values incrementally, which necessitates breaking
    them into reasonably sized parts that can individually serialized and then
    re-assembled after deserialization.
*)

(** see comment in [Module_type] where [S] is defined *)
module type S = Module_type.S

module type S_rpc = Module_type.S_rpc
module type S_rpc_with_sexp_of_part = Module_type.S_rpc_with_sexp_of_part

(** [Stable_without_of_sexp] is used for keys in [S_rpc]-returning functors *)
module type Stable_without_of_sexp = sig
  type t [@@deriving bin_io, compare, sexp_of]

  include Comparator.Stable.V1.S with type t := t
end

module type Of_atomic = functor
  (A : sig
     type t [@@deriving bin_io, sexp]
   end)
  -> S with type t = A.t

module type Of_atomic_rpc = functor
  (A : sig
     type t [@@deriving bin_io]
   end)
  -> S_rpc with type t = A.t

module type Of_map = functor (Key : Stable) (Data : S) ->
  S with type t = (Key.t, Data.t, Key.comparator_witness) Map.t

module type Of_map_rpc = functor (Key : Stable_without_of_sexp) (Data : S_rpc) ->
  S_rpc with type t = (Key.t, Data.t, Key.comparator_witness) Map.t

module type Of_total_map = functor (Key : Total_map.Key_with_witnesses) (Data : S) ->
  S
    with type t =
      (Key.t, Data.t, Key.comparator_witness, Key.enumeration_witness) Total_map.t

module type Of_total_map_rpc = functor
  (Key : Total_map.Key_with_witnesses)
  (Data : S_rpc)
  ->
  S_rpc
    with type t =
      (Key.t, Data.t, Key.comparator_witness, Key.enumeration_witness) Total_map.t

module type Of_hashtbl = functor
  (Key : sig
     include Stable
     include Hashtbl.Key with type t := t
   end)
  (Data : S)
  -> S with type t = (Key.t, Data.t) Hashtbl.t

module type Of_hashtbl_rpc = functor
  (Key : sig
     include Stable_without_of_sexp
     include Hashtbl.Key_plain with type t := t
   end)
  (Data : S_rpc)
  -> S_rpc with type t = (Key.t, Data.t) Hashtbl.t

module type Of_set = functor (Key : Stable) ->
  S with type t = (Key.t, Key.comparator_witness) Set.t

module type Of_set_rpc = functor (Key : Stable_without_of_sexp) ->
  S_rpc with type t = (Key.t, Key.comparator_witness) Set.t

module type Of_tuple2 = functor (A : S) (B : S) -> S with type t = A.t * B.t

module type Of_tuple2_rpc = functor (A : S_rpc) (B : S_rpc) ->
  S_rpc with type t = A.t * B.t

module type Of_tuple3 = functor (A : S) (B : S) (C : S) -> S with type t = A.t * B.t * C.t

module type Of_tuple3_rpc = functor (A : S_rpc) (B : S_rpc) (C : S_rpc) ->
  S_rpc with type t = A.t * B.t * C.t

module type Of_tuple4 = functor (A : S) (B : S) (C : S) (D : S) ->
  S with type t = A.t * B.t * C.t * D.t

module type Of_tuple4_rpc = functor (A : S_rpc) (B : S_rpc) (C : S_rpc) (D : S_rpc) ->
  S_rpc with type t = A.t * B.t * C.t * D.t

module type Of_tuple5 = functor (A : S) (B : S) (C : S) (D : S) (E : S) ->
  S with type t = A.t * B.t * C.t * D.t * E.t

module type Of_tuple5_rpc = functor
  (A : S_rpc)
  (B : S_rpc)
  (C : S_rpc)
  (D : S_rpc)
  (E : S_rpc)
  -> S_rpc with type t = A.t * B.t * C.t * D.t * E.t

module type Of_tuple6 = functor (A : S) (B : S) (C : S) (D : S) (E : S) (F : S) ->
  S with type t = A.t * B.t * C.t * D.t * E.t * F.t

module type Of_tuple6_rpc = functor
  (A : S_rpc)
  (B : S_rpc)
  (C : S_rpc)
  (D : S_rpc)
  (E : S_rpc)
  (F : S_rpc)
  -> S_rpc with type t = A.t * B.t * C.t * D.t * E.t * F.t

module type Of_tuple7 = functor (A : S) (B : S) (C : S) (D : S) (E : S) (F : S) (G : S) ->
  S with type t = A.t * B.t * C.t * D.t * E.t * F.t * G.t

module type Of_tuple7_rpc = functor
  (A : S_rpc)
  (B : S_rpc)
  (C : S_rpc)
  (D : S_rpc)
  (E : S_rpc)
  (F : S_rpc)
  (G : S_rpc)
  -> S_rpc with type t = A.t * B.t * C.t * D.t * E.t * F.t * G.t

module type Of_tuple8 = functor
  (A : S)
  (B : S)
  (C : S)
  (D : S)
  (E : S)
  (F : S)
  (G : S)
  (H : S)
  -> S with type t = A.t * B.t * C.t * D.t * E.t * F.t * G.t * H.t

module type Of_tuple8_rpc = functor
  (A : S_rpc)
  (B : S_rpc)
  (C : S_rpc)
  (D : S_rpc)
  (E : S_rpc)
  (F : S_rpc)
  (G : S_rpc)
  (H : S_rpc)
  -> S_rpc with type t = A.t * B.t * C.t * D.t * E.t * F.t * G.t * H.t

module type Of_tuple9 = functor
  (A : S)
  (B : S)
  (C : S)
  (D : S)
  (E : S)
  (F : S)
  (G : S)
  (H : S)
  (I : S)
  -> S with type t = A.t * B.t * C.t * D.t * E.t * F.t * G.t * H.t * I.t

module type Of_tuple9_rpc = functor
  (A : S_rpc)
  (B : S_rpc)
  (C : S_rpc)
  (D : S_rpc)
  (E : S_rpc)
  (F : S_rpc)
  (G : S_rpc)
  (H : S_rpc)
  (I : S_rpc)
  -> S_rpc with type t = A.t * B.t * C.t * D.t * E.t * F.t * G.t * H.t * I.t

(*$ Streamable_cinaps.of_variant_intf 2 *)
module type Of_variant2 = functor (A : S) (B : S) ->
  S
    with type t =
      [ `A of A.t
      | `B of B.t
      ]

(*$*)

(*$ Streamable_cinaps.of_variant_rpc_intf 2 *)
module type Of_variant2_rpc = functor (A : S_rpc) (B : S_rpc) ->
  S_rpc
    with type t =
      [ `A of A.t
      | `B of B.t
      ]

(*$*)

(*$ Streamable_cinaps.of_variant_intf 3 *)
module type Of_variant3 = functor (A : S) (B : S) (C : S) ->
  S
    with type t =
      [ `A of A.t
      | `B of B.t
      | `C of C.t
      ]

(*$*)

(*$ Streamable_cinaps.of_variant_rpc_intf 3 *)
module type Of_variant3_rpc = functor (A : S_rpc) (B : S_rpc) (C : S_rpc) ->
  S_rpc
    with type t =
      [ `A of A.t
      | `B of B.t
      | `C of C.t
      ]

(*$*)

(*$ Streamable_cinaps.of_variant_intf 4 *)
module type Of_variant4 = functor (A : S) (B : S) (C : S) (D : S) ->
  S
    with type t =
      [ `A of A.t
      | `B of B.t
      | `C of C.t
      | `D of D.t
      ]

(*$*)

(*$ Streamable_cinaps.of_variant_rpc_intf 4 *)
module type Of_variant4_rpc = functor (A : S_rpc) (B : S_rpc) (C : S_rpc) (D : S_rpc) ->
  S_rpc
    with type t =
      [ `A of A.t
      | `B of B.t
      | `C of C.t
      | `D of D.t
      ]

(*$*)

(*$ Streamable_cinaps.of_variant_intf 5 *)
module type Of_variant5 = functor (A : S) (B : S) (C : S) (D : S) (E : S) ->
  S
    with type t =
      [ `A of A.t
      | `B of B.t
      | `C of C.t
      | `D of D.t
      | `E of E.t
      ]

(*$*)

(*$ Streamable_cinaps.of_variant_rpc_intf 5 *)
module type Of_variant5_rpc = functor
  (A : S_rpc)
  (B : S_rpc)
  (C : S_rpc)
  (D : S_rpc)
  (E : S_rpc)
  ->
  S_rpc
    with type t =
      [ `A of A.t
      | `B of B.t
      | `C of C.t
      | `D of D.t
      | `E of E.t
      ]

(*$*)

module type Of_list = functor (A : S) -> S with type t = A.t list
module type Of_list_rpc = functor (A : S_rpc) -> S_rpc with type t = A.t list
module type Of_nonempty_list = functor (A : S) -> S with type t = A.t Nonempty_list.t

module type Of_nonempty_list_rpc = functor (A : S_rpc) ->
  S_rpc with type t = A.t Nonempty_list.t

module type Of_option = functor (A : S) -> S with type t = A.t option
module type Of_option_rpc = functor (A : S_rpc) -> S_rpc with type t = A.t option
module type Of_result = functor (A : S) (B : S) -> S with type t = (A.t, B.t) result

module type Of_result_rpc = functor (A : S_rpc) (B : S_rpc) ->
  S_rpc with type t = (A.t, B.t) result

module type Of_fqueue = functor (A : S) -> S with type t = A.t Fqueue.t
module type Of_fqueue_rpc = functor (A : S_rpc) -> S_rpc with type t = A.t Fqueue.t
module type Of_sequence = functor (A : S) -> S with type t = A.t Sequence.t
module type Of_sequence_rpc = functor (A : S_rpc) -> S_rpc with type t = A.t Sequence.t

module type Of_streamable = functor
  (Streamable : S)
  (X : sig
     type t

     val to_streamable : t -> Streamable.t
     val of_streamable : Streamable.t -> t
   end)
  -> S with type t = X.t

module type Of_streamable_rpc = functor
  (Streamable : S_rpc)
  (X : sig
     type t

     val to_streamable : t -> Streamable.t
     val of_streamable : Streamable.t -> t
   end)
  -> S_rpc with type t = X.t

module type Of_sexpable = functor (Sexpable : Sexpable) -> S with type t = Sexpable.t

(** The [Fixpoint] functor can be used to make recursive types streamable *)
module type Fixpoint = functor
  (T : T)
  (F : functor (X : S with type t = T.t) -> S with type t = T.t)
  -> S with type t = T.t

module type Fixpoint_rpc = functor
  (T : T)
  (F : functor (X : S_rpc with type t = T.t) -> S_rpc with type t = T.t)
  -> S_rpc with type t = T.t

(** [Checked] is a wrapper functor for finding places that are producing binio values that
    are too large.  The output behaves exactly like the input, except that [to_parts] will
    raise if it ever produces an intermediate part whose binio size exceeds
    [max_intermediate_part_bin_size]. *)
module type Checked = functor
  (Limit : sig
     val max_intermediate_part_bin_size : int
     val here : Source_code_position.t
   end)
  (X : S)
  -> S with type t = X.t

module type Packed = functor (X : S) -> S with type t = X.t
module type Packed_rpc = functor (X : S_rpc) -> S_rpc with type t = X.t

module type Main = sig
  module type S = S
  module type S_rpc = S_rpc
  module type S_rpc_with_sexp_of_part = S_rpc_with_sexp_of_part
  module type Of_atomic = Of_atomic
  module type Of_atomic_rpc = Of_atomic_rpc
  module type Of_map = Of_map
  module type Of_map_rpc = Of_map_rpc
  module type Of_total_map = Of_total_map
  module type Of_total_map_rpc = Of_total_map_rpc
  module type Of_hashtbl = Of_hashtbl
  module type Of_hashtbl_rpc = Of_hashtbl_rpc
  module type Of_set = Of_set
  module type Of_set_rpc = Of_set_rpc
  module type Of_tuple2 = Of_tuple2
  module type Of_tuple2_rpc = Of_tuple2_rpc
  module type Of_tuple3 = Of_tuple3
  module type Of_tuple3_rpc = Of_tuple3_rpc
  module type Of_tuple4 = Of_tuple4
  module type Of_tuple4_rpc = Of_tuple4_rpc
  module type Of_tuple5 = Of_tuple5
  module type Of_tuple5_rpc = Of_tuple5_rpc
  module type Of_tuple6 = Of_tuple6
  module type Of_tuple6_rpc = Of_tuple6_rpc
  module type Of_variant2 = Of_variant2
  module type Of_variant2_rpc = Of_variant2_rpc
  module type Of_variant3 = Of_variant3
  module type Of_variant3_rpc = Of_variant3_rpc
  module type Of_variant4 = Of_variant4
  module type Of_variant4_rpc = Of_variant4_rpc
  module type Of_variant5 = Of_variant5
  module type Of_variant5_rpc = Of_variant5_rpc
  module type Of_list = Of_list
  module type Of_list_rpc = Of_list_rpc
  module type Of_nonempty_list = Of_nonempty_list
  module type Of_nonempty_list_rpc = Of_nonempty_list_rpc
  module type Of_option = Of_option
  module type Of_option_rpc = Of_option_rpc
  module type Of_result = Of_result
  module type Of_result_rpc = Of_result_rpc
  module type Of_fqueue = Of_fqueue
  module type Of_fqueue_rpc = Of_fqueue_rpc
  module type Of_sequence = Of_sequence
  module type Of_sequence_rpc = Of_sequence_rpc
  module type Of_streamable = Of_streamable
  module type Of_streamable_rpc = Of_streamable_rpc
  module type Fixpoint = Fixpoint
  module type Fixpoint_rpc = Fixpoint_rpc
  module type Checked = Checked
  module type Packed = Packed
  module type Packed_rpc = Packed_rpc

  (** The latest versions of each functor.  These functors are unstable *)

  module Of_atomic : Of_atomic
  module Of_atomic_rpc : Of_atomic_rpc
  module Of_map : Of_map
  module Of_map_rpc : Of_map_rpc
  module Of_total_map : Of_total_map
  module Of_total_map_rpc : Of_total_map_rpc
  module Of_hashtbl : Of_hashtbl
  module Of_hashtbl_rpc : Of_hashtbl_rpc
  module Of_set : Of_set
  module Of_set_rpc : Of_set_rpc
  module Of_tuple2 : Of_tuple2
  module Of_tuple2_rpc : Of_tuple2_rpc
  module Of_tuple3 : Of_tuple3
  module Of_tuple3_rpc : Of_tuple3_rpc
  module Of_tuple4 : Of_tuple4
  module Of_tuple4_rpc : Of_tuple4_rpc
  module Of_tuple5 : Of_tuple5
  module Of_tuple5_rpc : Of_tuple5_rpc
  module Of_tuple6 : Of_tuple6
  module Of_tuple6_rpc : Of_tuple6_rpc
  module Of_tuple7 : Of_tuple7
  module Of_tuple7_rpc : Of_tuple7_rpc
  module Of_tuple8 : Of_tuple8
  module Of_tuple8_rpc : Of_tuple8_rpc
  module Of_tuple9 : Of_tuple9
  module Of_tuple9_rpc : Of_tuple9_rpc
  module Of_variant2 : Of_variant2
  module Of_variant2_rpc : Of_variant2_rpc
  module Of_variant3 : Of_variant3
  module Of_variant3_rpc : Of_variant3_rpc
  module Of_variant4 : Of_variant4
  module Of_variant4_rpc : Of_variant4_rpc
  module Of_variant5 : Of_variant5
  module Of_variant5_rpc : Of_variant5_rpc
  module Of_list : Of_list
  module Of_list_rpc : Of_list_rpc
  module Of_nonempty_list : Of_nonempty_list
  module Of_nonempty_list_rpc : Of_nonempty_list_rpc
  module Of_option : Of_option
  module Of_option_rpc : Of_option_rpc
  module Of_result : Of_result
  module Of_result_rpc : Of_result_rpc
  module Of_fqueue : Of_fqueue
  module Of_fqueue_rpc : Of_fqueue_rpc
  module Of_sequence : Of_sequence
  module Of_sequence_rpc : Of_sequence_rpc
  module Of_streamable : Of_streamable
  module Of_streamable_rpc : Of_streamable_rpc
  module Of_sexpable : Of_sexpable
  module Fixpoint : Fixpoint
  module Fixpoint_rpc : Fixpoint_rpc
  module Checked : Checked
  module Packed : Packed
  module Packed_rpc : Packed_rpc
  module Remove_t_rpc = Remove_t.F_rpc
  module Remove_t = Remove_t.F

  module Stable : sig
    module type S = S
    module type S_rpc = S_rpc
    module type S_rpc_with_sexp_of_part = S_rpc_with_sexp_of_part

    module Remove_t = Remove_t
    module Remove_t_rpc = Remove_t_rpc

    (** Individually-accessible stable versions of each functor. *)

    module Checked : Checked

    module Packed : sig
      module V1 : Packed
    end

    module Packed_rpc : sig
      module V1 : Packed_rpc
    end

    module Fixpoint : sig
      module V1 : Fixpoint
    end

    module Fixpoint_rpc : sig
      module V1 : Fixpoint_rpc
    end

    module Of_atomic : sig
      module V1 : Of_atomic
    end

    module Of_atomic_rpc : sig
      module V1 : Of_atomic_rpc
    end

    module Of_fqueue : sig
      module V2 : Of_fqueue
      module V3 : Of_fqueue
    end

    module Of_fqueue_rpc : sig
      module V2 : Of_fqueue_rpc
      module V3 : Of_fqueue_rpc
    end

    module Of_hashtbl : sig
      module V1 : Of_hashtbl
    end

    module Of_hashtbl_rpc : sig
      module V1 : Of_hashtbl_rpc
    end

    module Of_list : sig
      module V2 : Of_list
      module V3 : Of_list
    end

    module Of_list_rpc : sig
      module V2 : Of_list_rpc
      module V3 : Of_list_rpc
    end

    module Of_nonempty_list : sig
      module V1 : Of_nonempty_list
    end

    module Of_nonempty_list_rpc : sig
      module V1 : Of_nonempty_list_rpc
    end

    module Of_map : sig
      module V1 : Of_map
      module V2 : Of_map
    end

    module Of_map_rpc : sig
      module V1 : Of_map_rpc
      module V2 : Of_map_rpc
    end

    module Of_total_map : sig
      module V1 : Of_total_map
    end

    module Of_total_map_rpc : sig
      module V1 : Of_total_map_rpc
    end

    module Of_option : sig
      module V1 : Of_option
      module V2 : Of_option
    end

    module Of_option_rpc : sig
      module V1 : Of_option_rpc
      module V2 : Of_option_rpc
    end

    module Of_result : sig
      module V1 : Of_result
    end

    module Of_result_rpc : sig
      module V1 : Of_result_rpc
    end

    module Of_set : sig
      module V2 : Of_set
      module V3 : Of_set
    end

    module Of_set_rpc : sig
      module V2 : Of_set_rpc
      module V3 : Of_set_rpc
    end

    module Of_sequence : sig
      module V1 : Of_sequence
    end

    module Of_sequence_rpc : sig
      module V1 : Of_sequence_rpc
    end

    module Of_streamable : sig
      module V1 : Of_streamable
    end

    module Of_streamable_rpc : sig
      module V1 : Of_streamable_rpc
    end

    module Of_tuple2 : sig
      module V1 : Of_tuple2
    end

    module Of_tuple2_rpc : sig
      module V1 : Of_tuple2_rpc
    end

    module Of_tuple3 : sig
      module V1 : Of_tuple3
    end

    module Of_tuple3_rpc : sig
      module V1 : Of_tuple3_rpc
    end

    module Of_tuple4 : sig
      module V1 : Of_tuple4
    end

    module Of_tuple4_rpc : sig
      module V1 : Of_tuple4_rpc
    end

    module Of_tuple5 : sig
      module V1 : Of_tuple5
    end

    module Of_tuple5_rpc : sig
      module V1 : Of_tuple5_rpc
    end

    module Of_tuple6 : sig
      module V1 : Of_tuple6
    end

    module Of_tuple6_rpc : sig
      module V1 : Of_tuple6_rpc
    end

    module Of_tuple7 : sig
      module V1 : Of_tuple7
    end

    module Of_tuple7_rpc : sig
      module V1 : Of_tuple7_rpc
    end

    module Of_tuple8 : sig
      module V1 : Of_tuple8
    end

    module Of_tuple8_rpc : sig
      module V1 : Of_tuple8_rpc
    end

    module Of_tuple9 : sig
      module V1 : Of_tuple9
    end

    module Of_tuple9_rpc : sig
      module V1 : Of_tuple9_rpc
    end

    module Of_variant2 : sig
      module V1 : Of_variant2
    end

    module Of_variant2_rpc : sig
      module V1 : Of_variant2_rpc
    end

    module Of_variant3 : sig
      module V1 : Of_variant3
    end

    module Of_variant3_rpc : sig
      module V1 : Of_variant3_rpc
    end

    module Of_variant4 : sig
      module V1 : Of_variant4
    end

    module Of_variant4_rpc : sig
      module V1 : Of_variant4_rpc
    end

    module Of_variant5 : sig
      module V1 : Of_variant5
    end

    module Of_variant5_rpc : sig
      module V1 : Of_variant5_rpc
    end

    module Of_sexpable : sig
      module V1 : Of_sexpable
    end

    (** Toplevel versions of the [Streamable] library, used by [@@deriving streamable
        ~version].

        These are meant to be "add only" -- new functor types can be added but not
        removed, and version cannot change after it's added.  If we ever want add a new
        version of one of the functors bundled in a [Streamable.Stable.Vn] module, we'll
        add [Streamable.Stable.V(n+1)] and add it there.
    *)

    module V1 : sig
      module Fixpoint = Fixpoint.V1
      module Fixpoint_rpc = Fixpoint_rpc.V1
      module Of_atomic = Of_atomic.V1
      module Of_atomic_rpc = Of_atomic_rpc.V1
      module Of_fqueue = Of_fqueue.V3
      module Of_fqueue_rpc = Of_fqueue_rpc.V3
      module Of_hashtbl = Of_hashtbl.V1
      module Of_hashtbl_rpc = Of_hashtbl_rpc.V1
      module Of_list = Of_list.V3
      module Of_list_rpc = Of_list_rpc.V3
      module Of_map = Of_map.V2
      module Of_map_rpc = Of_map_rpc.V2
      module Of_nonempty_list = Of_nonempty_list.V1
      module Of_nonempty_list_rpc = Of_nonempty_list_rpc.V1
      module Of_option = Of_option.V2
      module Of_option_rpc = Of_option_rpc.V2
      module Of_result = Of_result.V1
      module Of_result_rpc = Of_result_rpc.V1
      module Of_sequence = Of_sequence.V1
      module Of_sequence_rpc = Of_sequence_rpc.V1
      module Of_set = Of_set.V3
      module Of_set_rpc = Of_set_rpc.V3
      module Of_sexpable = Of_sexpable.V1
      module Of_streamable = Of_streamable.V1
      module Of_streamable_rpc = Of_streamable_rpc.V1
      module Of_total_map = Of_total_map.V1
      module Of_total_map_rpc = Of_total_map_rpc.V1
      module Of_tuple2 = Of_tuple2.V1
      module Of_tuple2_rpc = Of_tuple2_rpc.V1
      module Of_tuple3 = Of_tuple3.V1
      module Of_tuple3_rpc = Of_tuple3_rpc.V1
      module Of_tuple4 = Of_tuple4.V1
      module Of_tuple4_rpc = Of_tuple4_rpc.V1
      module Of_tuple5 = Of_tuple5.V1
      module Of_tuple5_rpc = Of_tuple5_rpc.V1
      module Of_tuple6 = Of_tuple6.V1
      module Of_tuple6_rpc = Of_tuple6_rpc.V1
      module Of_tuple7 = Of_tuple7.V1
      module Of_tuple7_rpc = Of_tuple7_rpc.V1
      module Of_tuple8 = Of_tuple8.V1
      module Of_tuple8_rpc = Of_tuple8_rpc.V1
      module Of_tuple9 = Of_tuple9.V1
      module Of_tuple9_rpc = Of_tuple9_rpc.V1
      module Of_variant2 = Of_variant2.V1
      module Of_variant2_rpc = Of_variant2_rpc.V1
      module Of_variant3 = Of_variant3.V1
      module Of_variant3_rpc = Of_variant3_rpc.V1
      module Of_variant4 = Of_variant4.V1
      module Of_variant4_rpc = Of_variant4_rpc.V1
      module Of_variant5 = Of_variant5.V1
      module Of_variant5_rpc = Of_variant5_rpc.V1
      module Remove_t = Remove_t
      module Remove_t_rpc = Remove_t_rpc
    end
  end
end