A binding for the native
wcwidth. It's important that you
before using it, like this:
#!/usr/bin/env runhaskell import Text.Printf import System.Locale.SetLocale import Data.Char.WCWidth main = do setLocale LC_ALL (Just "") sequence_ [ display c | c <- chars ] where chars = [minBound..'A'] display c = printf "%04x %2d %s\n" (fromEnum c) (wcwidth c) (show c)
The program file
WCWidthTableaux.hs contains a more extensive example of
Note that this binding to the native implementation gets certain characters wrong in obvious ways as well as ways that are problematic for indentation based languages. The ASCII tab should be assigned a width of 8, not -1; and one is likely to find -1 assigned to numerous obscure characters (for example, symbols from the Book of Changes).