static <A> L<A> moveItemsFirst(Cl<A> itemsToMove, Cl<A> l) {
  if (empty(itemsToMove) || empty(l)) ret asList(l);
  itemsToMove = asSet(itemsToMove);
  var set = asSet(l);
  L<A> out = emptyList(l(l));
  for (a : itemsToMove)
    if (set.contains(a))
      out.add(a);
  for (A a : l)
    if (!itemsToMove.contains(a))
      out.add(a);
  ret out;
}