@@ -37,6 +37,52 @@ let fromInitializer = (~length, f) =>
37
37
38
38
@get external length : array <'a > => int = "length"
39
39
40
+ let rec equalFromIndexU = (a , b , i , eq , len ) =>
41
+ if i === len {
42
+ true
43
+ } else if eq (. a -> getUnsafe (i ), b -> getUnsafe (i )) {
44
+ equalFromIndexU (a , b , i + 1 , eq , len )
45
+ } else {
46
+ false
47
+ }
48
+
49
+ let equalU = (a , b , eq ) => {
50
+ let len = a -> length
51
+ if len === b -> length {
52
+ equalFromIndexU (a , b , 0 , eq , len )
53
+ } else {
54
+ false
55
+ }
56
+ }
57
+
58
+ let equal = (a , b , eq ) => equalU (a , b , (. a , b ) => eq (a , b ))
59
+
60
+ let rec compareFromIndexU = (a , b , i , cmp , len ) =>
61
+ if i === len {
62
+ 0
63
+ } else {
64
+ let c = cmp (. a -> getUnsafe (i ), b -> getUnsafe (i ))
65
+ if c === 0 {
66
+ compareFromIndexU (a , b , i + 1 , cmp , len )
67
+ } else {
68
+ c
69
+ }
70
+ }
71
+
72
+ let compareU = (a , b , cmp ) => {
73
+ let lenA = a -> length
74
+ let lenB = b -> length
75
+ if lenA > lenB {
76
+ 1
77
+ } else if lenA < lenB {
78
+ - 1
79
+ } else {
80
+ compareFromIndexU (a , b , 0 , cmp , lenA )
81
+ }
82
+ }
83
+
84
+ let compare = (a , b , cmp ) => compareU (a , b , (. a , b ) => cmp (a , b ))
85
+
40
86
@send external copyAllWithin : (array <'a >, ~target : int ) => array <'a > = "copyWithin"
41
87
42
88
@send
0 commit comments