假设我有一个列表:
[Nothing, Just 1, Nothing, Just 2]
我想要获取第一个Just
(非错误)的值;在这个例子中,它是Just 1
。我能想到的唯一办法是:
我想要获取第一个Just
(非错误)的值;在这个例子中,它是Just 1
。我能想到的唯一办法是:
firstJust xs = case filter isJust xs of
[] -> Nothing
Just x -> Just x
是否有更好/单子泛型的方法来做这件事?
Maybe
替换为First
后,你可以直接使用fold
函数。 - dfeuerfirstJust xs = asum xs <|> Nothing
来处理空列表。 - Steven Shawasum ([] :: [Maybe Int])
是Nothing
,所以空列表没有问题。 - Neil MayhewLast
。 - Neil Mayhew