fun{a:t@ype} append {m,n:nat} .<m>.
(xs: list (a, m), ys: list (a, n)):<> list (a, m+n) =
case+ xs of
| list_cons (x, xs1) => list_cons (x, append (xs1, ys))
| list_nil () => ys
fn{a:t@ype} append {m,n:nat}
(xs: list (a, m), ys: list (a, n)):<> list (a, m+n) = let
fun loop {m:nat} .<m>. (
xs: list (a, m), ys: list (a, n), res: &List a? >> list (a, m+n)
) :<> void =
case+ xs of
| list_cons (x, xs1) => let
val () = res := list_cons {a} {0} (x, ?)
val list_cons (_, !p_res) = res
val () = loop (xs1, ys, !p_res)
in
fold@ res end | list_nil () => (res := ys)
var res: List a val () = loop (xs, ys, res)
in
res
end