List.merge.go: def of Base Import: import Base Lines 1150-1170 of Base/base.bend: https://jend.leeeet.dev/read.txt?path=Base/base.bend&start_line=1150&end_line=1170 import Base # The fuel bounds the steps: a sort passes its length, enough for any merge. def List.merge.go( ~A: Data, ~le: A -> A -> Bool, fuel: Nat, st: List<&2, A> & List<&2, A> & List<&2, A> ) -> List<&2, A>: match fuel: case 0n: (acc, xs, ys) = st List.reverse.go(&2, A, acc, List.append(&2, A, xs, ys)) case 1n+f: (acc, xs, ys) = st match xs ys: case Nil{} Nil{}: List.reverse.go(&2, A, acc, Nil{}) case Nil{} y <> yt: List.reverse.go(&2, A, acc, y <> yt) case x <> xt Nil{}: List.reverse.go(&2, A, acc, x <> xt) case +x <> xt +y <> yt: List.merge.go(~A, ~le, f, List.merge.step(A, acc, x, xt, y, yt, le(x, y))) Uses (8): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Bool https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List.append https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List.merge.step https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List.reverse.go https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Pair https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Sigma