为什么不在Haskell中嵌套地图的行为与我期望的一样?

时间:2018-01-20 00:52:38

标签: haskell

我希望能够将递归自定义数据类型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

问题是它总是返回空列表[]并且它编译得非常好,所以没有错误可以让我解决。

1 个答案:

答案 0 :(得分:0)

正如丹尼尔·瓦格纳在评论中暗示的那样,我在printCategories'函数中遗失的所有单一类别的函数都是基本案例printCategory (Category a []) = [a],问题的解决方案是concatMap类别列表中的单一类别功能。