@@ -111,7 +111,7 @@ let get x n =
111
111
else nthAux x n
112
112
113
113
let getExn x n =
114
- if n < 0 then [% assert " nthAssert " ]
114
+ if n < 0 then [% assert " getExn " ]
115
115
else nthAuxAssert x n
116
116
117
117
let rec partitionAux p cell precX precY =
@@ -305,34 +305,38 @@ let concat xs ys =
305
305
unsafeMutateTail (copyAuxCont t cell) ys;
306
306
cell
307
307
308
- let map xs f =
308
+ let mapU xs f =
309
309
match xs with
310
310
| [] -> []
311
311
| h ::t ->
312
312
let cell = mutableCell (f h [@ bs]) [] in
313
313
copyAuxWithMap t cell f;
314
314
cell
315
315
316
- let zipBy l1 l2 f =
316
+ let map xs f = mapU xs (fun[@ bs] x -> f x )
317
+
318
+ let zipByU l1 l2 f =
317
319
match (l1, l2) with
318
320
| (a1 ::l1 , a2 ::l2 ) ->
319
321
let cell = mutableCell (f a1 a2 [@ bs]) [] in
320
322
copyAuxWithMap2 f l1 l2 cell;
321
323
cell
322
324
| [] , _ | _ , [] -> []
323
325
324
- let mapWithIndex xs f =
326
+ let zipBy l1 l2 f = zipByU l1 l2 (fun[@ bs] x y -> f x y)
327
+
328
+ let mapWithIndexU xs f =
325
329
match xs with
326
330
[] -> []
327
331
| h ::t ->
328
332
let cell = mutableCell (f 0 h [@ bs]) [] in
329
333
copyAuxWithMapI f 1 t cell;
330
334
cell
331
335
336
+ let mapWithIndex xs f = mapWithIndexU xs (fun[@ bs] i x -> f i x)
332
337
333
338
334
-
335
- let makeBy n f =
339
+ let makeByU n f =
336
340
if n < = 0 then []
337
341
else
338
342
let headX = mutableCell (f 0 [@ bs]) [] in
@@ -347,6 +351,8 @@ let makeBy n f =
347
351
;
348
352
headX
349
353
354
+ let makeBy n f = makeByU n (fun[@ bs] x -> f x)
355
+
350
356
let make n v =
351
357
if n < = 0 then []
352
358
else
@@ -466,135 +472,154 @@ let rec mapRevAux f accu xs =
466
472
| [] -> accu
467
473
| a ::l -> mapRevAux f (f a [@ bs] :: accu) l
468
474
469
- let mapReverse l f =
475
+ let mapReverseU l f =
470
476
mapRevAux f [] l
471
477
478
+ let mapReverse l f = mapReverseU l (fun [@bs ] x -> f x)
472
479
473
- let rec forEach xs f =
480
+ let rec forEachU xs f =
474
481
match xs with
475
482
[] -> ()
476
- | a ::l -> f a [@ bs]; forEach l f
483
+ | a ::l -> f a [@ bs]; forEachU l f
484
+
485
+ let forEach xs f = forEachU xs (fun [@bs ] x -> f x)
477
486
478
487
let rec iteri xs i f =
479
488
match xs with
480
489
[] -> ()
481
490
| a ::l -> f i a [@ bs]; iteri l (i + 1 ) f
482
491
483
- let forEachWithIndex l f = iteri l 0 f
492
+ let forEachWithIndexU l f = iteri l 0 f
493
+ let forEachWithIndex l f = forEachWithIndexU l (fun [@bs ] i x -> f i x)
484
494
485
- let rec reduce l accu f =
495
+ let rec reduceU l accu f =
486
496
match l with
487
497
[] -> accu
488
- | a ::l -> reduce l (f accu a [@ bs]) f
498
+ | a ::l -> reduceU l (f accu a [@ bs]) f
499
+
500
+ let reduce l accu f =
501
+ reduceU l accu (fun[@ bs] acc x -> f acc x )
489
502
490
- let rec reduceReverse l accu f =
503
+ let rec reduceReverseU l accu f =
491
504
match l with
492
505
[] -> accu
493
- | a ::l -> f a (reduceReverse l accu f) [@ bs]
506
+ | a ::l -> f a (reduceReverseU l accu f) [@ bs]
494
507
508
+ let reduceReverse l accu f =
509
+ reduceReverseU l accu (fun [@bs ] a b -> f a b)
495
510
496
511
let rec mapRevAux2 l1 l2 accu f =
497
512
match (l1, l2) with
498
513
| (a1 ::l1 , a2 ::l2 ) -> mapRevAux2 l1 l2 (f a1 a2 [@ bs]:: accu) f
499
514
| _ , [] | [] , _ -> accu
500
515
501
- let mapReverse2 l1 l2 f =
516
+ let mapReverse2U l1 l2 f =
502
517
mapRevAux2 l1 l2 [] f
503
518
504
- let rec forEach2 l1 l2 f =
519
+ let mapReverse2 l1 l2 f = mapReverse2U l1 l2 (fun [@bs ] a b -> f a b)
520
+
521
+ let rec forEach2U l1 l2 f =
505
522
match (l1, l2) with
506
- | (a1 ::l1 , a2 ::l2 ) -> f a1 a2 [@ bs]; forEach2 l1 l2 f
523
+ | (a1 ::l1 , a2 ::l2 ) -> f a1 a2 [@ bs]; forEach2U l1 l2 f
507
524
| [] ,_ | _ , [] -> ()
508
525
509
- let rec reduce2 l1 l2 accu f =
526
+ let forEach2 l1 l2 f = forEach2U l1 l2 (fun [@bs ] a b -> f a b)
527
+
528
+ let rec reduce2U l1 l2 accu f =
510
529
match (l1, l2) with
511
530
| (a1 ::l1 , a2 ::l2 ) ->
512
- reduce2 l1 l2 (f accu a1 a2 [@ bs]) f
531
+ reduce2U l1 l2 (f accu a1 a2 [@ bs]) f
513
532
| [] , _ | _ , [] -> accu
514
533
515
- let rec reduceReverse2 l1 l2 accu f =
534
+ let reduce2 l1 l2 acc f = reduce2U l1 l2 acc (fun[@ bs] a b c -> f a b c )
535
+
536
+ let rec reduceReverse2U l1 l2 accu f =
516
537
match (l1, l2) with
517
538
([] , [] ) -> accu
518
- | (a1 ::l1 , a2 ::l2 ) -> f a1 a2 (reduceReverse2 l1 l2 accu f) [@ bs]
539
+ | (a1 ::l1 , a2 ::l2 ) -> f a1 a2 (reduceReverse2U l1 l2 accu f) [@ bs]
519
540
| _ , [] | [] , _ -> accu
520
541
521
- let rec every xs p =
542
+ let reduceReverse2 l1 l2 acc f = reduceReverse2U l1 l2 acc (fun [@bs ] a b c -> f a b c)
543
+
544
+ let rec everyU xs p =
522
545
match xs with
523
546
[] -> true
524
- | a ::l -> p a [@ bs] && every l p
547
+ | a ::l -> p a [@ bs] && everyU l p
525
548
526
- let rec some xs p =
549
+ let every xs p = everyU xs (fun[@ bs] x -> p x)
550
+
551
+ let rec someU xs p =
527
552
match xs with
528
553
[] -> false
529
- | a ::l -> p a [@ bs] || some l p
554
+ | a ::l -> p a [@ bs] || someU l p
555
+
556
+ let some xs p = someU xs (fun[@ bs] x -> p x)
530
557
531
- let rec every2 l1 l2 p =
558
+ let rec every2U l1 l2 p =
532
559
match (l1, l2) with
533
560
(_ , [] ) | [] ,_ -> true
534
- | (a1 ::l1 , a2 ::l2 ) -> p a1 a2 [@ bs] && every2 l1 l2 p
561
+ | (a1 ::l1 , a2 ::l2 ) -> p a1 a2 [@ bs] && every2U l1 l2 p
562
+
563
+ let every2 l1 l2 p = every2U l1 l2 (fun[@ bs] a b -> p a b)
535
564
536
- let rec cmp l1 l2 p =
565
+ let rec cmpU l1 l2 p =
537
566
match (l1, l2) with
538
567
| [] , [] -> 0
539
568
| _ , [] -> 1
540
569
| [] , _ -> - 1
541
570
| (a1 ::l1 , a2 ::l2 ) ->
542
571
let c = p a1 a2 [@ bs] in
543
572
if c = 0 then
544
- cmp l1 l2 p
573
+ cmpU l1 l2 p
545
574
else c
546
575
547
- let rec eq l1 l2 p =
576
+ let cmp l1 l2 f = cmpU l1 l2 (fun [@bs ] x y -> f x y)
577
+
578
+ let rec eqU l1 l2 p =
548
579
match (l1, l2) with
549
580
| [] , [] -> true
550
581
| _ , []
551
582
| [] , _ -> false
552
583
| (a1 ::l1 , a2 ::l2 ) ->
553
584
if p a1 a2 [@ bs] then
554
- eq l1 l2 p
585
+ eqU l1 l2 p
555
586
else false
587
+ let eq l1 l2 f = eqU l1 l2 (fun [@bs ] x y -> f x y)
556
588
557
- let rec some2 l1 l2 p =
589
+ let rec some2U l1 l2 p =
558
590
match (l1, l2) with
559
591
[] , _ | _ , [] -> false
560
- | (a1 ::l1 , a2 ::l2 ) -> p a1 a2 [@ bs] || some2 l1 l2 p
592
+ | (a1 ::l1 , a2 ::l2 ) -> p a1 a2 [@ bs] || some2U l1 l2 p
561
593
594
+ let some2 l1 l2 p = some2U l1 l2 (fun[@ bs] a b -> p a b)
562
595
563
- let rec has xs x eq =
596
+ let rec hasU xs x eq =
564
597
match xs with
565
598
[] -> false
566
- | a ::l -> eq a x [@ bs] || has l x eq
599
+ | a ::l -> eq a x [@ bs] || hasU l x eq
600
+
601
+ let has xs x eq = hasU xs x (fun [@bs ] a b -> eq a b)
567
602
568
- let rec hasByReference xs x =
569
- match xs with
570
- [] -> false
571
- | a ::l -> a == x || hasByReference l x
572
603
573
- let rec assoc xs x eq =
604
+ let rec assocU xs x eq =
574
605
match xs with
575
606
| [] -> None
576
607
| (a ,b )::l ->
577
608
if eq a x [@ bs] then Some b
578
- else assoc l x eq
609
+ else assocU l x eq
579
610
580
- let rec assocByReference xs x =
581
- match xs with
582
- [] -> None
583
- | (a ,b )::l -> if a == x then Some b else assocByReference l x
611
+ let assoc xs x eq = assocU xs x (fun[@ bs] a b -> eq a b)
584
612
585
- let rec hasAssoc xs x eq =
586
- match xs with
587
- | [] -> false
588
- | (a , b ) :: l -> eq a x [@ bs] || hasAssoc l x eq
589
613
590
- let rec hasAssocByReference xs x =
614
+ let rec hasAssocU xs x eq =
591
615
match xs with
592
616
| [] -> false
593
- | (a , b ) :: l -> a == x || hasAssocByReference l x
617
+ | (a , b ) :: l -> eq a x [ @ bs] || hasAssocU l x eq
594
618
619
+ let hasAssoc xs x eq = hasAssocU xs x (fun[@ bs] a b -> eq a b)
595
620
596
621
(* remove the first pair *)
597
- let removeAssoc xs x eq =
622
+ let removeAssocU xs x eq =
598
623
match xs with
599
624
| [] -> []
600
625
| (a , _ as pair ) :: l ->
@@ -603,26 +628,20 @@ let removeAssoc xs x eq =
603
628
let cell = mutableCell pair [] in
604
629
removeAssocAuxWithMap l x cell eq ;
605
630
cell
631
+
632
+ let removeAssoc xs x eq = removeAssocU xs x (fun [@bs ] a b -> eq a b)
606
633
607
- let removeAssocByReference xs x =
608
- match xs with
609
- | [] -> []
610
- | (a , b as pair ) :: l ->
611
- if a == x then l
612
- else
613
- let cell = mutableCell pair [] in
614
- removeAssocAuxByReference l x cell;
615
- cell
616
634
617
- let rec getBy xs p =
635
+ let rec getByU xs p =
618
636
match xs with
619
637
| [] -> None
620
638
| x :: l ->
621
639
if p x [@ bs] then Some x
622
- else getBy l p
640
+ else getByU l p
623
641
642
+ let getBy xs p = getByU xs (fun[@ bs] a -> p a)
624
643
625
- let rec keep xs p =
644
+ let rec keepU xs p =
626
645
match xs with
627
646
| [] -> []
628
647
| h ::t ->
@@ -633,10 +652,11 @@ let rec keep xs p =
633
652
cell
634
653
end
635
654
else
636
- keep t p
655
+ keepU t p
637
656
657
+ let keep xs p = keepU xs (fun[@ bs] x -> p x)
638
658
639
- let rec keepMap xs p =
659
+ let rec keepMapU xs p =
640
660
match xs with
641
661
| [] -> []
642
662
| h ::t ->
@@ -648,10 +668,11 @@ let rec keepMap xs p =
648
668
cell
649
669
end
650
670
| None ->
651
- keepMap t p
671
+ keepMapU t p
652
672
673
+ let keepMap xs p = keepMapU xs (fun [@bs ] x -> p x)
653
674
654
- let partition l p =
675
+ let partitionU l p =
655
676
match l with
656
677
| [] -> [] ,[]
657
678
| h ::t ->
@@ -664,6 +685,7 @@ let partition l p =
664
685
else
665
686
unsafeTail nextX, nextY
666
687
688
+ let partition l p = partitionU l (fun [@bs ] x -> p x)
667
689
668
690
let rec unzip xs =
669
691
match xs with
0 commit comments