code: function categoriseProperties(meta, entries) {
    const byName     = (a, b) => compare(a.name, b.name);
    const byCategory = (a, b) => compareCategories(a.category, b.category);
  
    const asCategoryObject = ([category, members]) => ({ category, members });
  
    const category = ({ value }) =>
      isObject(value) ?  meta.for(value)
                             .get(meta.fields.category)
                             .getOrElse('(Uncategorised)')
      : /* else */       '(Uncategorised)';
  
    return groupBy(entries.sort(byName), category)
             .map(asCategoryObject)
             .sort(byCategory);
  }
docs: /*~
  Returns a list of categories for the given properties.