I think this question is ill-posed. In show :: (Show a) => a -> String
, String
is a type synonym for [Char]
and Char
is a smart enough data type to represent any Unicode character.
The character type Char is an enumeration whose values represent Unicode (or equivalently ISO/IEC 10646) characters (see http://www.unicode.org/ for details). This set extends the ISO 8859-1 (Latin-1) character set (the first 256 characters), which is itself an extension of the ASCII character set (the first 128 characters). A character literal in Haskell has type Char.
This is the kind of power in simplicity you get when you choose simple data types and may come as a surprise to people immigrating from other languages where the default string type can only represent up to ASCII or UTF-16 or whatever else garbage.
So in that sense show
already is the Unicode version of show
. Whether or not String
is an efficient representation of a Unicode, well that's another question entirely.