Render a complete TOML document like
prettyToml but use a
custom key ordering. The comparison function has access to the
complete key path. Note that only keys in the same table will every be
compared.
This operation allows you to render your TOML files with the most
important sections first. A TOML file describing a package might
desire to have the
[package] section first before any of the
ancillary configuration sections.
The
table path is the name of the table being sorted. This
allows the projection to be aware of which table is being sorted.
The
key is the key in the table being sorted. These are the
keys that will be compared to each other.
Here's a projection that puts the
package section first, the
secondary section second, and then all remaining cases are
sorted alphabetically afterward.
example :: [String] -> String -> Either Int String
example [] "package" = Left 1
example [] "second" = Left 2
example _ other = Right other
We could also put the tables in reverse-alphabetical order by
leveraging an existing newtype.
reverseOrderProj :: [String] -> String -> Down String
reverseOrderProj _ = Down