在Haskell中覆盖字符串/Char的显示方法


我有一个问题:如何重写字符串或Char的show方法?谢谢。

既然大家都很喜欢我的评论,我就在这里给出一个答案:

如果你想在现有类型上重新实现类型类,你可以把它们包装在一个newtype声明的类型中。这允许您定义自己的实现,而在运行时没有任何实际开销(因为newtype与原始类型是同构的,因此在运行时没有实际的装箱)。

可能看起来像这样:

newtype MyChar = MyChar Char
instance Show MyChar where
  show (MyChar c) = "head "" ++ c : """

你可以用MyChar包裹Char s来使用它,像这样:

print $ fmap MyChar "test"

这将输出

[head "t",head "e",head "s",head "t"]

如果你想这么做,那你就做错了。

关于更技术性的原因,请参见我对上一个问题的回答。

真的应该使用你自己的a -> String函数(可能通过你自己的类型类)或者使用一个漂亮的打印库来获得更详细的输出(其中一些已经有一个内置的Pretty类)。

相关内容

最新更新