aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2019-08-14 23:22:54 +0100
committerLouis Pilfold <louis@lpil.uk>2019-08-14 23:22:54 +0100
commitddba860d353d86c3daa8c3bf7054e9f73c43eac4 (patch)
tree54346ef18ca6f6f5aba295abfa720f2e2af0f0e9 /src
parentf79ba9b6e4e22188197f87b44794c9771bb40410 (diff)
downloadgleam_stdlib-ddba860d353d86c3daa8c3bf7054e9f73c43eac4.tar.gz
gleam_stdlib-ddba860d353d86c3daa8c3bf7054e9f73c43eac4.zip
list:sort requires comparison function
Diffstat (limited to 'src')
-rw-r--r--src/gleam/list.gleam12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/gleam/list.gleam b/src/gleam/list.gleam
index 96ed75e..ab8b600 100644
--- a/src/gleam/list.gleam
+++ b/src/gleam/list.gleam
@@ -232,19 +232,19 @@ pub fn unique(list) {
}
}
-fn merge_sort(a, b) {
+fn merge_sort(a, b, compare) {
case {a, b} {
| {[], _} -> b
| {_, []} -> a
| {[ax | ar], [bx | br]} ->
- case ax < bx {
- | True -> [ax | merge_sort(ar, b)]
- | False -> [bx | merge_sort(a, br)]
+ case compare(ax, bx) {
+ | order:Lt -> [ax | merge_sort(ar, b, compare)]
+ | _ -> [bx | merge_sort(a, br, compare)]
}
}
}
-pub fn sort(list) {
+pub fn sort(list, compare) {
let list_length = length(list)
case list_length < 2 {
| True -> list
@@ -252,7 +252,7 @@ pub fn sort(list) {
let split_length = list_length / 2
let a_list = take(list, split_length)
let b_list = drop(list, split_length)
- merge_sort(sort(a_list), sort(b_list))
+ merge_sort(sort(a_list, compare), sort(b_list, compare), compare)
}
}