PureScript中ASCII颜色前缀无法使用问题求助
修复PureScript中ANSI颜色转义的解析错误
错误原因
- 非法八进制转义:PureScript字符串的八进制转义(
\0xx)仅支持0-7的数字,你代码里的\097包含数字9,属于非法字符,直接导致解析失败。 - 错误的ESC起始码:ANSI颜色序列的起始是ESC字符(ASCII值27),正确转义应为八进制
\033或十六进制\x1B,你使用的\031、\032都不是ESC的有效转义。 - 颜色代码不匹配:所有分支都用了
0;33m(黄色),没有对应各颜色的正确ANSI编号。
修复后的代码
data Color = White | Red | Green | Yellow colorizeWith :: Color -> String -> String colorizeWith Green s = "\x1B[0;32m" <> s <> "\x1B[0m" -- 绿色前景色 colorizeWith Red s = "\x1B[0;31m" <> s <> "\x1B[0m" -- 红色前景色 colorizeWith Yellow s = "\x1B[0;33m" <> s <> "\x1B[0m" -- 黄色前景色 colorizeWith White s = "\x1B[0;37m" <> s <> "\x1B[0m" -- 白色前景色
关键修正说明
- 改用十六进制转义
\x1B表示ESC字符,比八进制\033更直观,同时规避八进制数字的限制问题。 - 为每个
Color分支匹配正确的ANSI前景色代码:- 红色 → 31
- 绿色 → 32
- 黄色 → 33
- 白色 → 37
- 移除包含非法数字的
\097转义,替换为标准的ESC转义序列。
内容的提问来源于stack exchange,提问作者Max Smirnov
相关产品推荐
相关产品推荐

