<html><head><style>p{margin-top:0px;margin-bottom:0px;}</style></head><body><div style="font-size:10pt; font-family:Gulim, sans-serif;"><p><span style="font-family: courier new, serif;">Current Haskell has 'simple' `Char`-to-`Char` casing functions (as specified by Unicode), namely `toUpper`, `toLower` and `toTitle`. </span></p><p> </p><p><span style="font-family: courier new, serif;">So to convert cases of a `String`, Haskell intends `fmap toUpper`, etc. But this has some bugs.</span></p><p> </p><p><span style="font-family: courier new, serif;">Case 1. German ß (Eszett) </span></p><p> </p><p><span style="font-family: courier new, serif;">'ß' (U+00DF), Latin Small Letter Sharp S, is a lowercase letter itself, but Unicode doesn't specify its 'simple' uppercase counterpart.</span></p><p><span style="font-family: courier new, serif;">It's because its uppercase counterpart is not a single character, but two characters, "SS".</span></p><p> </p><p><span style="font-family: courier new, serif;">Case 2. Turkish İ and ı</span></p><p><span style="font-family: courier new, serif;">Rather than the common 'I' and 'i' case pair, Turkish language has the 'İ' (U+0130) and </span><span style="font-family: courier new, serif;">'i' pair and the 'I' and 'ı</span><span style="font-family: courier new, serif;">'</span><span style="font-family: courier new, serif;"><span style="font-family: courier new, serif;"><span style="font-family: courier new, serif;"> (U+0131)</span></span> pair. Those are, dotted I pair and dotless I pair, respectively.</span></p><p><span style="font-family: courier new, serif;"> </span></p><p><span style="font-family: courier new, serif;">Case 3. Greek Σ (Sigma) </span></p><p><span style="font-family: courier new, serif;">Greek </span><span style="font-family: courier new, serif;"><span style="font-family: courier new, serif;">'Σ' (U+03A3) must be lowercase mapped to 'ς' (U+03C2) if followed by a whitespace, rather than normal 'σ' (U+03C3).<br></span></span></p><p><span style="font-family: courier new, serif;"> </span></p><p><span style="font-family: courier new, serif;">Case 4. Greek iota subscript (Ypogegrammeni)</span></p><p><span style="font-family: courier new, serif;">Greek 'Capital' letters with iota subscripts (for example, 'ᾈ' (U+1F88)), though they are the 'simple' uppercase counterpart of their lowercase counterpart, they themselves are actually treated as titlecase characters. For example, the actual uppercase counterpart of 'ᾀ' (U+1F80) is "ἈΙ" (U+1F08 U+0399). That is, an actual capital iota instead of the iota subscript.</span></p><p><span style="font-family: courier new, serif;"> </span></p><p><span style="font-family: courier new, serif;">Case 5. Precomposed letters without upper/lowercase counterpart </span></p><p style="margin-bottom: 0in; line-height: 100%"><span style="font-family: courier new, serif;">For example, ΐ (U+03B0) doesn't have precomposed uppercase counterpart. It must be effectively mapped to "</span><span style="font-family: courier new, serif;"></span><font face="Liberation Serif, serif"><span style="font-family: courier new, serif;">Ϊ</span></font><font face="Liberation Serif, serif"><span style="font-family: courier new, serif;">́" (U+03AA U+0301).<br></span></font></p><p style="margin-bottom: 0in; line-height: 100%"><font face="Liberation Serif, serif"><span style="font-family: courier new, serif;"><br></span></font></p><p style="margin-bottom: 0in; line-height: 100%"><font face="Liberation Serif, serif"><span style="font-family: courier new, serif;">In Summary, we need more elaborated casing functions which are `String`-to-`String`.<br></span></font></p><p style="margin-bottom: 0in; line-height: 100%"><font face="Liberation Serif, serif"><span style="font-family: courier new, serif;"><br></span></font></p><p style="margin-bottom: 0in; line-height: 100%"><font face="Liberation Serif, serif"><span style="font-family: courier new, serif;">Bibliography:</span></font></p><p style="margin-bottom: 0in; line-height: 100%"><font face="Liberation Serif, serif"><span style="font-family: courier new, serif;">    </span></font><i>The Unicode Standard Version 11.0 – Core Specification</i>, Section 5.18.<br><font face="Liberation Serif, serif"><span style="font-family: courier new, serif;"></span></font></p>

<p><span style="font-family: courier new, serif;"><style type="text/css">p { margin-bottom: 0.1in; line-height: 115%; }</style></span></p></div></body></html><table style='display:none'><tr><td><img src="https://mail.naver.com/readReceipt/notify/?img=JZRCbHFTpz%2FYaqgZKrRZazioaAKXFobXpAC0p4UqKxglFxMXFAvwMxMwFrJoMvIo%2BrkSKAE5W4d5W4C5bX0q%2BzkR74FTWx%2FsWz0Sb4JZ16kqtzCCbrR0Wzm5WXiN.gif" border="0"/></td></tr></table>