模式匹配列表的元素

时间:2012-06-04 03:33:05

标签: haskell pattern-matching

我有一个列表,其中包含具有多个构造函数的类型的元素(例如this)。如何提取与特定构造函数匹配的列表元素?

我能想到的一种方法是使用列表理解。例如。从上面的示例中给出了一个列表fields,其中包含Field类型的元素,我可以提取第一个From字段:

from = head [head f | From f <- fields]

有更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

要过滤与From构造函数匹配的列表,您可以使用filter函数:

filter (\x -> case x of From {} -> True; _ -> False) fields

然后取head取第一个元素。

head . filter (\x -> case x of From {} -> True; _ -> False) $ fields