public List<Class<? super T>> inheritance() {
    return unfold(
            (java.lang.Class<? super T> c2) -> {
              if (c == null)
                return none();
              else {
                final P2<java.lang.Class<? super T>, java.lang.Class<? super T>> p =
                    new P2<java.lang.Class<? super T>, java.lang.Class<? super T>>() {
                      public java.lang.Class<? super T> _1() {
                        return c;
                      }

                      @SuppressWarnings({"unchecked"})
                      public java.lang.Class<? super T> _2() {
                        return c.getSuperclass();
                      }
                    };
                return some(p);
              }
            }, c).map(c1 -> clas(c1));
  }