如何在Haskell中按类型过滤列表

4

我有一个列表,其中的元素是某种节点类型,可能是UNode、LNode或RNode。

[
    UNode("a"), LNode("b"), RNode("c")
]

我该如何按类型(例如UNode)对其进行过滤?
2个回答

13

这里似乎可以使用列表推导式:

[ x | x@(Unode _) <- list ]

5

很不幸,我所知道的最简单的方式也是唯一的方式:匹配。

let isUNode node =
    case node of
        UNode _ -> True
        _ -> False
in filter isUNode

2
可以更简洁地写成 let isUNode UNode = True; isUNode _ = False in filter isUNode,不需要使用 case 表达式。 - Aadit M Shah
isUNode这个名称比较长的情况下,使用这个更短的名称,我不喜欢重复它。就是这样。 - Ry-

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接