在Haskell中覆盖String/Char的show方法

Aca*_*mia 5 string haskell overriding char show

我有一个问题:如何覆盖String或Char的show方法?谢谢.

Lil*_*ard 8

由于人们似乎喜欢我的评论,这里作为答案:

如果要在现有类型上重新实现类型类,可以将它们包装在newtype-declared类型中.这允许您定义自己的实现,在运行时没有任何实际开销(因为newtype与原始类型同构,在运行时没有完成实际装箱).

这可能看起来像这样:

newtype MyChar = MyChar Char

instance Show MyChar where
  show (MyChar c) = "head \"" ++ c : "\""
Run Code Online (Sandbox Code Playgroud)

您可以通过包装Chars 来使用它MyChar,如下所示:

print $ fmap MyChar "test"
Run Code Online (Sandbox Code Playgroud)

这将打印出来

[head "t",head "e",head "s",head "t"]
Run Code Online (Sandbox Code Playgroud)


iva*_*anm 2

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

有关更多技术原因,请参阅我对上一个问题的回答。

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