我想为我的数据类型“My list”编写我自己的show示例。到目前为止,我的方法是有效的,但我总是在结尾处使用逗号。我已经尝试过从最后一个元素开始Fold并将其从列表中删除,但这非常麻烦,而且没有成功。有没有更简单的方法来获得正确的解决方案?
实际值{1,2,3,} -〉预期值{1,2,3}
instance Show a => Show (Mylist1 a) where
show (Mylist1 []) = "{}"
show (Mylist1 xs) = "{" ++ foldr (\x y -> show x ++ "," ++ y) "}" xs
3条答案
按热度按时间n8ghc7c11#
既然你已经把空列表的情况分开了,为什么不利用非空列表的第一个元素呢?
yuvru6vn2#
有
intercalate
i34xakig3#
如果你真的想使用纯
foldr
,而不想在show
参数上进行任何模式匹配,那么你可以通过累加延续并对其应用参数来实现这个技巧,这样构建的计算就可以知道它当前正在处理的元素索引。但这是一个矫枉过正,不要使用它,除非你出于某种原因必须在一个单一的
foldr
表达整个事情。