define append-partitioned (
  pivot: T,
  less: List<T>,
  greater: List<T> -> List<T>
):
  greater -> quicksort -> less -> quicksort -> swap
  -> list::append (pivot -> list::singleton)
  -> list::append

define quicksort<T: Ord> (list: List<T> -> List<T>):
  list::uncons -> case:
    empty:
      []
    cons (pivot, tail):
      tail -> list::partition (_ < pivot)
           -> append-partitioned (pivot)

// Example usage.
[2, 8, 7, 1, 3, 5, 6, 4] -> quicksort -> about