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

Her*_*ler 3 haskell

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

[
    UNode("a"), LNode("b"), RNode("c")
]
Run Code Online (Sandbox Code Playgroud)

如何按类型过滤(例如UNode)

chi*_*chi 9

列表推导在这里似乎很有用:

[ x | x@(Unode _) <- list ]
Run Code Online (Sandbox Code Playgroud)


Ry-*_*Ry- 5

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

let isUNode node =
    case node of
        UNode _ -> True
        _ -> False
in filter isUNode
Run Code Online (Sandbox Code Playgroud)

  • 可以更简洁地写为`let isUNode UNode = True;。isUNode _ =过滤器isUNode中的False。无需使用“ case”表达式。 (2认同)