    package Sorting api;
    import Carbon library "Printing";

    fn Partition[T:! Comparable & Movable](s: Slice(T))
          -> i64 {
      var i: i64 = -1;
      let (x: i64, var y: auto) = (1, {.x = {.a = (1, {.k = 42}), .b = 13}, .y = "..."});

      for (e: T in s) {
        if (e <= s.Last()) {
          ++i;
          Swap(&s[i], &e);
        }
      }
      return i;
    }

    fn QuickSort[T:! Comparable & Movable](s: Slice(T)) {
      if (s.Size() <= 1) {
        return;
      }
      let p: i64 = Partition(s);
      QuickSort(s[:p - 1]));
      QuickSort(s[p + 1:]));
    }

    interface WidgetI {
    }

    constraint WidgetC {
    }

    abstract class Abstract {
      abstract fn DoSomething[self: Self]();
    }

    base class Widget {
      virtual fn Print[addr self: Self*](var i: i64, x: f32 = 4.2, _: bool);
    }

    fn Widget.Print[addr self: Self*](var i: i64, x: f32, _: bool, 47) {
      Carbon.Print("test" + "t\u{FFFF}his");
      Carbon.Print(
          """
          testing more
          with weird stuff \
          that does stuff
          """);
      Carbon.Print(
          """c++
          template <typename T> class C {};
          """);
    }

    class FancyWidget(T:! type) extends Widget {
      impl fn Print[self: Self]();

      impl as Add(T) {
        fn Op[self: Self]();
      }
    }

    fn FancyWidget(T:! type).Print[self: Self]() {
      Carbon.Print("more test");
    }

    impl forall [T:! type] FancyWidget(T) as Printable {
      alias Print = FancyWidget(T).Print;
    }