GHCi中String与[Char]类型值的显示不一致问题
如何让GHCi将字符串/字符列表以
['a','b','c']形式显示? 首先要明确:Haskell里的String就是[Char]的类型别名(type String = [Char]),所以p和q的类型本质完全等价,GHCi不会区分你是用字符串字面量还是列表字面量定义的,只会根据值的最终类型选择显示格式——而默认情况下,GHCi对[Char]类型的值会优先用双引号包裹的字符串形式输出,这就是q也显示成"abc"的原因。
实现以字符列表形式显示的方法
有两种常用方式可以让p和q都显示为['a','b','c']:
手动调用自定义打印函数
你可以写一个专门的函数,强制用列表格式打印字符列表:printAsCharList :: [Char] -> IO () printAsCharList = putStrLn . showList ""在GHCi中调用这个函数:
> printAsCharList p ['a','b','c'] > printAsCharList q ['a','b','c']临时修改GHCi的交互式打印规则
如果你希望当前GHCi会话中所有[Char]类型的值都默认以列表形式显示,可以执行::set -interactive-print=printAsCharList之后直接求值
p或q就会得到列表格式的输出。要恢复默认的字符串显示,执行::set -interactive-print=print
为什么默认不显示为列表形式?
这是GHCi的设计选择:字符串是Haskell中非常常用的类型,用双引号包裹的形式比冗长的字符列表更直观易读,所以针对[Char]类型做了特殊的打印逻辑,优先使用字符串格式输出,不管你是通过哪种字面量定义的这个值。
内容的提问来源于stack exchange,提问作者Bart Hofland
相关产品推荐
相关产品推荐

