<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hi Cafe,<div><br></div><div>I'm wondering if there's any existing packages that do "version sorting": as an example, for a list like:</div><div><br></div><div><font face="monospace, monospace">["foo-10.20", "foo-1.2", "foo-2.100", "foo-1.12"]</font><br></div><div><br></div><div>I'd like the result to be:</div><div><br></div><div><font face="monospace, monospace">[</font><span style="font-family:monospace,monospace">"foo-1.2",</span><span style="font-family:monospace,monospace"> </span><span style="font-family:monospace,monospace">"foo-1.12",</span><span style="font-family:monospace,monospace"> "foo-2.100",</span><span style="font-family:monospace,monospace"> </span><span style="font-family:monospace,monospace">"foo-10.20"</span><span style="font-family:monospace,monospace">]</span></div><div><br></div><div>I could think of an implementation that turns <font face="monospace, monospace">String </font><font face="arial, helvetica, sans-serif">elements of a list</font> into <font face="monospace, monospace">[Either Int String]</font> by grouping consecutive chunks using <font face="monospace, monospace">span</font> and <font face="monospace, monospace">isDigit</font> and then do a <font face="monospace, monospace">sortOn</font><font face="arial, helvetica, sans-serif">:</font></div><div><font face="monospace, monospace"><br></font></div><div><div style=""><font face="monospace, monospace">versionSort :: [String] -> [String]</font></div><div style=""><font face="monospace, monospace">versionSort = sortOn brkND</font></div><div style=""><font face="monospace, monospace">  where</font></div><div style=""><font face="monospace, monospace">    tr f g (x,y) = f x : g y</font></div><div style=""><font face="monospace, monospace">    -- ND for non-digits</font></div><div style=""><font face="monospace, monospace">    brkND = tr Right brkD . span (not . isDigit)</font></div><div style=""><font face="monospace, monospace">    brkD = tr (Left . read @Int) brkND . span isDigit</font></div><div style="font-family:arial,helvetica,sans-serif"><br></div></div><div><font face="arial, helvetica, sans-serif">(side question: does the helper function </font><font face="monospace, monospace">tr </font><font face="arial, helvetica, sans-serif">I defined above have a commonly known name?)</font></div><div><font face="arial, helvetica, sans-serif">just wondering if there are more sophisticated solutions available.</font></div><div><br></div><div>Best,<br><div>Javran</div></div></div></div></div></div>