如何在haskell中按类型筛选列表

如何在haskell中按类型筛选列表,haskell,Haskell,我有一个列表,其中包含一些节点类型的元素,可以是UNode、LNode或RNode [ UNode("a"), LNode("b"), RNode("c") ] 如何按类型筛选(例如UNode)不幸的是,据我所知,最简单的方法也是唯一的方法:匹配 let isUNode node = case node of UNode _ -> True _ -> False in filter isUNode 列表理解在这里似乎很有用: [ x

我有一个列表,其中包含一些节点类型的元素,可以是UNode、LNode或RNode

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

如何按类型筛选(例如UNode)

不幸的是,据我所知,最简单的方法也是唯一的方法:匹配

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

列表理解在这里似乎很有用:

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

[x|x@(Unode)这可以更简洁地写成
让isUNode Unode=True;isUNode=False在filter isUNode
中。不需要使用
大小写
表达式。@AaditMShah:如果
isUNode
是一个较长的名称,那么它会较短,我不喜欢重复它。仅此而已。