From 2a9268ebe13c858d92e0fcfd748ce95535aa80ba Mon Sep 17 00:00:00 2001 From: nojaf Date: Wed, 18 Jun 2025 08:20:01 +0200 Subject: [PATCH 1/2] Add docstring for Null.compare and Null.equal --- runtime/Stdlib_Null.resi | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/runtime/Stdlib_Null.resi b/runtime/Stdlib_Null.resi index e219ee709c..7cfb9d99a9 100644 --- a/runtime/Stdlib_Null.resi +++ b/runtime/Stdlib_Null.resi @@ -47,8 +47,43 @@ let asNullValue = myStr->Null.make // The compiler now thinks this can be `strin */ external make: 'a => t<'a> = "%identity" +/** +`equal(a, b, eq)` checks if `a` and `b` are equal. +If both are `Null.Value`, it will use function `eq` to check if the values are equal. + +## Examples +```rescript +let a = Null.Value(1) +let b = Null.null +let c = Null.Value(2) + +assertEqual(Null.equal(a, b, Int.equal), false) +assertEqual(Null.equal(a, c, Int.equal), false) +assertEqual(Null.equal(Null.null, Null.null, Int.equal), true) +``` + */ let equal: (t<'a>, t<'b>, ('a, 'b) => bool) => bool +/** +`compare(a, b, cmp)` compares `a` and `b`. +If both are `Null.Value`, it will use function `cmp` to compare the values. + +## Examples +```rescript +let a = Null.Value(1) +let b = Null.null +let c = Null.Value(2) + +// A value is greater than null +assertEqual(Null.compare(a, b, Int.compare), Stdlib_Ordering.greater) +// A value is less than null +assertEqual(Null.compare(b, a, Int.compare), Stdlib_Ordering.less) +// A null is equal to null +assertEqual(Null.compare(Null.null, Null.null, Int.compare), Stdlib_Ordering.equal) +// The compare function is used if both are `Null.Value` +assertEqual(Null.compare(a, c, Int.compare), Stdlib_Ordering.less) +``` +*/ let compare: (t<'a>, t<'b>, ('a, 'b) => Stdlib_Ordering.t) => Stdlib_Ordering.t /** From 90b7f792e7b3b9b02d72abb9b0c39eae4982f8c1 Mon Sep 17 00:00:00 2001 From: nojaf Date: Wed, 18 Jun 2025 08:32:44 +0200 Subject: [PATCH 2/2] Use == --- runtime/Stdlib_Null.resi | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/runtime/Stdlib_Null.resi b/runtime/Stdlib_Null.resi index 7cfb9d99a9..fe59b02706 100644 --- a/runtime/Stdlib_Null.resi +++ b/runtime/Stdlib_Null.resi @@ -57,9 +57,9 @@ let a = Null.Value(1) let b = Null.null let c = Null.Value(2) -assertEqual(Null.equal(a, b, Int.equal), false) -assertEqual(Null.equal(a, c, Int.equal), false) -assertEqual(Null.equal(Null.null, Null.null, Int.equal), true) +Null.equal(a, b, Int.equal) == false +Null.equal(a, c, Int.equal) == false +Null.equal(Null.null, Null.null, Int.equal) == true ``` */ let equal: (t<'a>, t<'b>, ('a, 'b) => bool) => bool @@ -75,13 +75,13 @@ let b = Null.null let c = Null.Value(2) // A value is greater than null -assertEqual(Null.compare(a, b, Int.compare), Stdlib_Ordering.greater) +Null.compare(a, b, Int.compare) == Stdlib_Ordering.greater // A value is less than null -assertEqual(Null.compare(b, a, Int.compare), Stdlib_Ordering.less) +Null.compare(b, a, Int.compare) == Stdlib_Ordering.less // A null is equal to null -assertEqual(Null.compare(Null.null, Null.null, Int.compare), Stdlib_Ordering.equal) +Null.compare(Null.null, Null.null, Int.compare) == Stdlib_Ordering.equal // The compare function is used if both are `Null.Value` -assertEqual(Null.compare(a, c, Int.compare), Stdlib_Ordering.less) +Null.compare(a, c, Int.compare) == Stdlib_Ordering.less ``` */ let compare: (t<'a>, t<'b>, ('a, 'b) => Stdlib_Ordering.t) => Stdlib_Ordering.t