preprocessing printf/regex strings (like ocaml)

Robert Ennals Robert.Ennals@cl.cam.ac.uk
Tue, 14 May 2002 16:48:07 +0100


> Robert Ennals <Robert.Ennals@cl.cam.ac.uk> wrote:
> > I personally much prefer the syntax currently used in Haskell, which is also 
> > essentially what is used in most other recent languages, including Java, C++, 
> > and (god help me) Perl.
> > 
> > In the example given, I could write:
> > 
> > "I have " ++ action ++ " " ++ number ++ " " ++ whatas
> > where
> >     action = "trained"
> >     number = show 1
> >     whatas = "Jedi"
> 
> This is all fine and dandy, but how would you translate this to
> 42 different languages your customers want supported, with
> different word order and all that?

Surely that problem only arises if one insists on encoding all the relevant 
information inside a string.

An alternative would be to encode all user-visible messages in an external 
module, with a Haskell function for each message.

The translator would then redefine this module for each language.

It doesn't involve any more complexity - it just shifts the complexity into a 
more expressive language.

For example:

module Messages

-- English language version 

where

stuffDone :: String -> Int -> String -> String
stuffDone action number whatas 
    = "I have " ++ action ++ " " ++ (show number) ++ " " ++ whatas

jedi = "Jedi"
trained = "Trained"


Normal code then does the following:

import qualified Messages as M

putStrLn $ M.stuffDone M.trained 1 M.jedi



Much nicer IMHO.


-Rob