query
On this page

splitByAndCompare

lib.trivial.splitByAndCompare

Docs pulled from | This Revision | about 1 hour ago


Split type into two subtypes by predicate p, take all elements of the first subtype to be less than all the elements of the second subtype, compare elements of a single subtype with yes and no respectively.

Inputs

p

Predicate

yes

Comparison function if predicate holds for both values

no

Comparison function if predicate holds for neither value

a

First value to compare

b

Second value to compare

Type

(a -> bool) -> (a -> a -> int) -> (a -> a -> int) -> (a -> a -> int)

Examples

lib.trivial.splitByAndCompare usage example

let cmp = splitByAndCompare (hasPrefix "foo") compare compare; in

cmp "a" "z" => -1
cmp "fooa" "fooz" => -1

cmp "f" "a" => 1
cmp "fooa" "a" => -1
# while
compare "fooa" "a" => 1

Noogle detected

Aliases

Implementation

The following is the current implementation of this function.

splitByAndCompare =
    p: yes: no: a: b:
    if p a
    then if p b then yes a b else -1
    else if p b then 1 else no a b;