如何从Maybe
元组中提取第一个元素?我试过使用fst
,但似乎不起作用。
由于Maybe
是一个函子,使用fmap
将fst :: (a, b) -> a
提升到与Maybe (a,b)
一起使用。
> :t fmap fst
fmap fst :: Functor f => f (b, b1) -> f b
> fmap fst $ Just (3, 6)
Just 3
> fmap fst $ Nothing
Nothing
Maybe a
而不是a
,所以您可以使用maybe
函数来解包结果(如果Maybe(a, b)
实际上是Nothing
,则提供默认值):> import Data.Maybe
> maybe 0 fst (Just (3, 6))
3
> maybe 0 fst Nothing
0
你可以使用case
对Maybe
值进行模式匹配,例如:
case mbVal of
Just x -> fst x
Nothing -> ...
如果你确定值是 Just
的,你也可以使用 fromJust
。
最后,你可以直接匹配元组的第一个元素:
case mbVal of
Just (x,_) -> x
maybe undefined fst
或者(fst <$>)
。 - Will Ness