假设我有
print [chr 0x49, chr 0x9f]
输出
"I\159"
当打印出必须显示为转义序列的字符时,如何使print
使用十六进制数字?所以我的输出显示为:
"I\x9f"
答案 0 :(得分:8)
简短的回答是你无法改变它。
print x
与putStrLn (show x)
相同,您无法更改show
适用于已定义Show实例的类型的方式。
但是,您可以定义自己的格式化功能:
fmtChar :: Char -> String
fmtChar ch = ...
fmtString :: String -> String
fmtString s = "\"" ++ (concatMap fmtChar s) ++ "\""
并在想要查看格式的地方使用它们:
putStrLn $ fmtString [ chr 0x49, chr 0x9f ]
定义fmtChar
的一种方式:
import Numeric (showHex)
fmtChar ch =
if length s == 1
then s
else "\\x" ++ showHex (fromEnum ch) ""
where s = show ch
(注意:Numeric
位于base
,因此您已拥有它。)