Hi Cafe,

I'm wondering if there's any existing packages that do "version sorting": as an example, for a list like:

["foo-10.20", "foo-1.2", "foo-2.100", "foo-1.12"]

I'd like the result to be:

["foo-1.2", "foo-1.12", "foo-2.100", "foo-10.20"]

I could think of an implementation that turns String elements of a list into [Either Int String] by grouping consecutive chunks using span and isDigit and then do a sortOn:

versionSort :: [String] -> [String]
versionSort = sortOn brkND
  where
    tr f g (x,y) = f x : g y
    -- ND for non-digits
    brkND = tr Right brkD . span (not . isDigit)
    brkD = tr (Left . read @Int) brkND . span isDigit

(side question: does the helper function tr I defined above have a commonly known name?)
just wondering if there are more sophisticated solutions available.

Best,
Javran