diff --git a/compiler/mono/src/ir.rs b/compiler/mono/src/ir.rs index 45ea50c6e5..ee6d8232ca 100644 --- a/compiler/mono/src/ir.rs +++ b/compiler/mono/src/ir.rs @@ -6556,11 +6556,15 @@ fn from_can_pattern_help<'a>( let mut arguments = arguments.clone(); arguments.sort_by(|arg1, arg2| { - let layout1 = layout_cache.from_var(env.arena, arg1.0, env.subs).unwrap(); - let layout2 = layout_cache.from_var(env.arena, arg2.0, env.subs).unwrap(); + let size1 = layout_cache + .from_var(env.arena, arg1.0, env.subs) + .map(|x| x.alignment_bytes(env.ptr_bytes)) + .unwrap_or(0); - let size1 = layout1.alignment_bytes(env.ptr_bytes); - let size2 = layout2.alignment_bytes(env.ptr_bytes); + let size2 = layout_cache + .from_var(env.arena, arg2.0, env.subs) + .map(|x| x.alignment_bytes(env.ptr_bytes)) + .unwrap_or(0); size2.cmp(&size1) }); diff --git a/examples/benchmarks/RBTreeCk.roc b/examples/benchmarks/RBTreeCk.roc index 2a1d3a03a1..4a69241984 100644 --- a/examples/benchmarks/RBTreeCk.roc +++ b/examples/benchmarks/RBTreeCk.roc @@ -60,7 +60,7 @@ main = Nil -> Task.putLine "fail" -insert : Map, I64, Bool -> Map +insert : Tree (Num k) v, (Num k), v -> Tree (Num k) v insert = \t, k, v -> if isRed t then setBlack (ins t k v) else ins t k v @@ -78,7 +78,7 @@ isRed = \tree -> lt = \x, y -> x < y -ins : Map, I64, Bool -> Map +ins : Tree (Num k) v, (Num k), v -> Tree (Num k) v ins = \tree, kx, vx -> when tree is Leaf -> @@ -100,7 +100,7 @@ ins = \tree, kx, vx -> else Node Black a kx vx b -balance1 : Map, Map -> Map +balance1 : Tree a b, Tree a b -> Tree a b balance1 = \tree1, tree2 -> when tree1 is Leaf -> Leaf @@ -111,7 +111,7 @@ balance1 = \tree1, tree2 -> Node _ l ky vy r -> Node Black (Node Red l ky vy r) kv vv t Leaf -> Leaf -balance2 : Map, Map -> Map +balance2 : Tree a b, Tree a b -> Tree a b balance2 = \tree1, tree2 -> when tree1 is Leaf -> Leaf diff --git a/examples/benchmarks/RBTreeDel.roc b/examples/benchmarks/RBTreeDel.roc index 31cf63b2fa..172b97f7f2 100644 --- a/examples/benchmarks/RBTreeDel.roc +++ b/examples/benchmarks/RBTreeDel.roc @@ -87,7 +87,7 @@ isRed = \tree -> lt = \x, y -> x < y -ins : Map, I64, Bool -> Map +ins : Tree I64 Bool, I64, Bool -> Tree I64 Bool ins = \tree, kx, vx -> when tree is Leaf -> @@ -188,11 +188,12 @@ delMin = \t -> -delete : Map, I64 -> Map +delete : Tree I64 Bool, I64 -> Tree I64 Bool delete = \t, k -> when del t k is Del tx _ -> setBlack tx +del : Tree I64 Bool, I64 -> Del I64 Bool del = \t, k -> when t is Leaf -> Del Leaf False