Enforcing a gap in the middle of the range of Char would be exceedingly awkward to propagate through all of the libraries. Off the top of my head:<br><br>1.) Functions like succ and pred which currently work on Char as an enumeration would have to jump over the gap, to be truly anal retentive about the mapping<br>
2.) The toEnum and fromEnum would need to make the gap vanish as well, ruining the ability to treat toEnum/fromEnum as chr/ord<br>3.) Every application would take a performance hit<br>4.) What to do in the presence of an encoding error is even more uncertain. All you can do is throw an exception that can only be caught in IO.<br>
<br>A couple of less defensible considerations:<br><br>5.) It would break alternative encodings like utf-8b which use the invalid code points in the surrogate pair range to encode ill-formed bytes in the input stream to allow &#39;cut and paste&#39;-safe round tripping of utf-8b-&gt;Char-&gt;utf-8b even in the presence of invalid binary data/codepoints.<br>
6.) Not all data is properly encoded. Consider, Unicode data you get back from Oracle, which isn&#39;t really encoded in UTF-8, but is instead CESU-8, which encodes codepoints in the higher plane as a surrogate pair, then utf-8 encodes the surrogate pair.<br>
<br>So, I suppose the answer would be it is functioning as designed, because the current behavior is the least bad option. =)<br><br>-Edward Kmett<br><br><div class="gmail_quote">On Wed, Nov 18, 2009 at 10:28 AM, Manlio Perillo <span dir="ltr">&lt;<a href="mailto:manlio_perillo@libero.it">manlio_perillo@libero.it</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi.<br>
<br>
The Unicode Standard (version 4.0, section 3.9, D31 - pag 76) says:<br>
<br>
&quot;&quot;&quot;Because surrogate code points are not included in the set of Unicode<br>
scalar values, UTF-32 code units in the range 0000D800 .. 0000DFFF are<br>
ill-formed&quot;&quot;&quot;<br>
<br>
However GHC does not reject this code units:<br>
<br>
Prelude&gt; print &#39;\x0000D800&#39;<br>
&#39;\55296&#39;<br>
<br>
<br>
Is this a correct behaviour?<br>
Note that Python, too (2.5.4, UCS4 build, Linux Debian), accept these<br>
code units.<br>
<br>
<br>
<br>
Thanks ┬áManlio<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</blockquote></div><br>