2012-06-04 161 views
2

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

我能弄清楚的一个方法是使用列表理解。例如。给定一个列表fields从上面的例子Field类型的元素,我可以提取第一From场:

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

有没有一种简单的方法来做到这一点?

+2

我没有看到,为什么你不能只匹配(从f :: _)?或者使用let f = match .. –

回答

1

要筛选匹配From构造函数列表中,您可以使用filter功能:

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

,然后采取head采取的第一个元素。

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