Skip to content
  • Sylvain Henry's avatar
    Remove "Ord FastString" instance · 4b4fbc58
    Sylvain Henry authored and Marge Bot's avatar Marge Bot committed
    FastStrings can be compared in 2 ways: by Unique or lexically. We don't
    want to bless one particular way with an "Ord" instance because it leads
    to bugs (#18562) or to suboptimal code (e.g. using lexical comparison
    while a Unique comparison would suffice).
    
    UTF-8 encoding has the advantage that sorting strings by their encoded
    bytes also sorts them by their Unicode code points, without having to
    decode the actual code points. BUT GHC uses Modified UTF-8 which
    diverges from UTF-8 by encoding \0 as 0xC080 instead of 0x00 (to avoid
    null bytes in the middle of a String so that the string can still be
    null-terminated). This patch adds a new `utf8CompareShortByteString`
    function that performs sorting by bytes but that also takes Modified
    UTF-8 into account. It is much more performant than decoding the strings
    into [Char] to perform comparisons (which we did in the previous patch).
    
    Bump haddock submodule
    4b4fbc58