
On Thu, Aug 15, 2002 at 01:11:46PM +0100, Alastair Reid wrote:
(Naturally, the idea is that Prelude.fromString can be repaced by a function that looks the string up in a translation table, instead of using the default value. Any reason this won't work?)
This goes quite a bit further than what I suggest above but let's try to sketch it out.
1) You have to define a new string type: 2) You have to define an instance:
I think this is not really what was meant. The gettext C function takes a C String, looks it up in a translation table and returns a pointer with the translated string (or the original if no translation is found). AFAIK e.g. ghc does store string literals as C char* and not as a Haskell list. Thus the question is how to tell the compiler that it should use peekCString (gettext strPtrToLiteral) instead of peekCString strPtrToLiteral for each string literal in the source code. We surely don't want to generate a Haskell list of characters, convert that back to a C string buffer, call gettext and convert the return value again to a Haskell list of Char. Making string literals work with [Char] and PackedString is an orthogonal issue to i18n. This would involve introducing a class and instances. When Haskell source files are read by character-set aware versions of readFile then ghc has to change in that string literals have to be stored in UTF-8 and accessed by something like peekUTF8String. Axel.