Haskell:如何从Maybe元组中获取元素

4

如何从Maybe元组中提取第一个元素?我试过使用fst,但似乎不起作用。


有一件事需要考虑:如果没有元组(即您的“Maybe”值包含“Nothing”),您希望发生什么? - Cubic
1
尝试使用 maybe undefined fst 或者 (fst <$>) - Will Ness
1
为什么这个被踩了? - Darkenor
2个回答

8

由于Maybe是一个函子,使用fmapfst :: (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

2

你可以使用caseMaybe值进行模式匹配,例如:

case mbVal of
  Just x -> fst x
  Nothing -> ...

如果你确定值是 Just 的,你也可以使用 fromJust

最后,你可以直接匹配元组的第一个元素:

case mbVal of
  Just (x,_) -> x

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接