[Haskell-cafe] A 3-line program that does not work

Don Stewart dons at galois.com
Sat Oct 24 16:43:06 EDT 2009


phi500ac:
> I have a friend who is an architect. I asked her why she does not use Haskell,
> since she is fond of functional programming. She writes her scripts in Clean,
> and needs to compile them before using them to generate postscript diagrams. In
> Haskell, I told her, she could use runghc, and skip the compilation step. She
> told me that she would consider switching to Haskell, and skipping the
> compilation step, if I could tell her how to write "fa ade" in Haskell.
> 
> C:\ghc\hastex>runghc tudin.hs
> 
> tudin.hs:10:19:
>     lexical error in string/character literal (UTF-8 decoding error)
> 
> After browsing the Internet, I noticed that a many of people are having the
> same problem.  Could someone tell me what is wrong with my friend's program?
> 
> import System.IO
> 
> main= do
>    outh <- openFile "garb.tsm" WriteMode
>    hPutStrLn outh "A fa ade is the exterior of a building"
>    hClose outh
>  
> I would appreciate a "normal" solution, that is, I would like to type the text
> in any editor, or generate it with LaTeX macros, and compile it using ghc.
> 

Use the utf8-string package to output utf8 to files. Something like:

    import qualified System.IO.UTF8 as U
    import System.IO

    main = do
        let s = "A façade is the exterior of a building"
        writeFile "garb.tsm" s
        t <- readFile "garb.tsm"
        print (s == t)

Which we can check keeps the characters:

    $ runhaskell A.hs
    True

Note that GHC 6.12 supports arbitrary encodings on Handles, making
this even easier,

    http://ghcmutterings.wordpress.com/2009/09/30/heads-up-what-you-need-to-know-about-unicode-io-in-ghc-6-12-1/


More information about the Haskell-Cafe mailing list