Haskell如何去除menu函数错误输出中Char参数的多余单引号
问题原因
Haskell的show函数处理Char类型值时,会默认在字符两侧包裹单引号,例如show 'd'的返回值是字符串"'d'",这就是输出中多余单引号的来源。同时原有代码的错误信息拼接缺少右括号和后续文本的空格,也会和测试用例预期不匹配。
解决方案
因为menu函数的第一个参数明确是Char类型,直接将字符转为单元素字符串即可,无需调用show。修改错误分支的拼接逻辑:
- 把
show x替换为[x]:[x]是长度为1的Char列表,也就是只包含字符x的字符串,不会额外生成单引号 - 在右括号后补充空格,匹配测试用例的预期格式
menu :: Char -> [a] -> Either String [[a]] menu 'p' l = Right (prefixes l) menu 's' l = Right (suffixes l) menu x _ = Left ("(" ++ [x] ++ ") is not supported, use (p)refix or (s)uffix")
验证效果
修改后调用menu 'd' [1,2]返回的Left值内容完全符合testMenuC的预期:"(d) is not supported, use (p)refix or (s)uffix"
内容的提问来源于stack exchange,提问作者SourceCodeEngineer
相关产品推荐
相关产品推荐

