H98 FFI Addendum 1.0, Release Candidate 15

Simon Marlow simonmar at microsoft.com
Fri Nov 14 05:04:56 EST 2003


 
> On Fri, Nov 14, 2003 at 01:57:41PM +1100, Manuel M T 
> Chakravarty wrote:
> >   These marshalling routines convert Haskell's Unicode
> >   representation for characters into the platform-specific
> >   encoding used for \code{wchar\_t} and vice versa.  In
> >   particular, on platforms that represent \code{wchar\_t}
> >   values according to the encoding specified by ISO/IEC
> >   10646, this conversion reduces to a simple type cast
> >   without any alteration of the character values.  For all
> >   other platforms, the exact rules of the conversion are
> >   platform-specific and not further defined in this report.
> > 
> > Does anybody have any suggestions for improving this
> > explanation?
> 
> I don't think we need to say anything special, the conversion 
> to wchar_t
> * is just as defined as that to char *. it is a locale dependent
> operation just like withCString and friends. one would make their
> decision as to which to use based on the library they are 
> trying to bind
> too, if a wchar_t interface is supported it should be prefered because
> it is more likely to preserve character codes.

It is true that strictly speaking we don't need to say anything here.
But I think it would be helpful to include a footnote as a guide to
implementors, something along the lines of

   [1] Note that if the platform defines __STDC_ISO_10646__ then wchar_t
   characters are Unicode code points, and thus the conversion between
   Haskell Char and CWChar is a simple cast.  On other platforms, the
   translation is locale-dependent just as for CChar.

And the paragraph in question could be just

  The module \code{CString} also exports a
  variant of the above string marshalling routines for wide
  characters, i.e. the C \code{wchar_t} type[1].

Cheers,
	Simon



More information about the FFI mailing list