有没有一种很好的方法可以在列表中找到第一次出现的构造函数,而无需下面示例中的显式递归?
data Elem = A Int | B Char deriving Show
getA :: [Elem] -> Maybe Elem
getA [] = Nothing
getA (e:es) =
case e of
A a -> Just (A a)
_ -> getA es
最佳答案
简单地
import Data.Maybe (listToMaybe)
getA xs = listToMaybe [e | e@(A _) <- xs]
附录:更好,使用空记录模式(kudos hammar)面向 future :
getA xs = listToMaybe [e | e@(A{}) <- xs]
但是请注意,这只适用于匹配的构造函数。对于一般属性,
find
更好:get prop xs = listToMaybe [e | e <- xs, prop e]
get prop xs = listToMaybe (filter prop xs)
get prop xs = find prop xs
关于haskell - 从列表中获取特定构造函数的第一次出现的惯用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8195145/