我希望能够将递归自定义数据类型Category的层次结构呈现为字符串列表,其中每个字符串都显示特定类别的路径。类别类型如下所示:
data Category = Category
{ name :: String
, sub :: [Category] }
例如,类别层次结构Category "A" [Category "B" [Category "C" []], Category "D" []]
在其字符串表示中看起来像["A > B > C", "A > B > D"]
,其中" > "
是分隔符。我尝试过的是:
printCategories :: [Category] -> [String]
printCategories xs = concatMap (\c -> ((name c)++) <$> (" > " ++) <$> (printCategories $ sub c)) xs
问题是它总是返回空列表[]
并且它编译得非常好,所以没有错误可以让我解决。
答案 0 :(得分:0)
正如丹尼尔·瓦格纳在评论中暗示的那样,我在printCategories'
函数中遗失的所有单一类别的函数都是基本案例printCategory (Category a []) = [a]
,问题的解决方案是concatMap
类别列表中的单一类别功能。