我有一些Show定义了自定义实例的类型。它们的结构如下:
data TopLevel = TopLevel SndLevel
data SndLevel = SndLevel Int
instance Show SndLevel where
show (SndLevel i) = "SndLevel: \n\t" ++ (show i)
Run Code Online (Sandbox Code Playgroud)
当它们出现在我的输出中时,我的Showfor实例SndLevel产生看起来很漂亮的字符串:
SndLevel:
5
Run Code Online (Sandbox Code Playgroud)
我想为此创建一个Show实例,topLevel以便TopLevel (SndLevel 5)在打印到终端时看起来像这样:
TopLevel
SndLevel
5
Run Code Online (Sandbox Code Playgroud)
我希望找到一个内置在Haskell中的函数,该函数将添加"\t"在字符串的开头以及"\n"该字符串出现的每个位置之前。
最好的解决方法,我发现将沿着答案的线条去这个职位。在这种情况下,我将替换"\n"为"\t\n"。
我假设我不是第一个需要在Haskell中使用Show实例来按层次组织数据的人,所以我想知道是否有一种更惯用的方式来完成此任务。我的问题有更好的解决方案吗?
ps:我意识到对于我上面使用的示例数据类型而言,这种打印不是最好的。我要为其编写实例的实际数据类型是产品类型,因此当它们延伸到一行时,它们的读取效果不佳。考虑到这一点,如果有一种流行的方法来解决这种问题,而无需使用换行符和制表符,那也可以解决我的问题。
我想在Haskell中用字符串替换子字符串,而不使用外部库,如果可能的话,还要具有良好的性能.
我想过使用Data.Text替换函数,但我不想将整个程序移植到使用Text类型而不是Strings.将包装String成一个Text值,然后替换我想要的东西,然后将那个Text值解压缩到String很多的缓慢Strings?