寻找Haskell中类似liftA2的函数:可合并双值的<|>替代函数
求问自定义Maybe函数的标准名称与所属类型类
我自己写了针对Maybe类型的liftA2实现,代码如下:
liftA2 :: (a -> b -> c) -> Maybe a -> Maybe b -> Maybe c liftA2 f Nothing Nothing = Nothing liftA2 f (Just x) Nothing = Nothing liftA2 f Nothing (Just y) = Nothing liftA2 f (Just x) (Just y) = f x y
确认过,这个实现和Control.Applicative里的标准liftA2(也和Control.Monad的liftM2等价)是完全一致的。
现在我定义了另一个类似的函数mystery,逻辑是:如果其中一个Maybe有值就返回它,两个都有值的时候用传入的函数合并,两个都空才返回空。代码如下:
mystery :: (a -> a -> a) -> Maybe a -> Maybe b -> Maybe c mystery f Nothing Nothing = Nothing mystery f (Just x) Nothing = Just x mystery f Nothing (Just y) = Just y mystery f (Just x) (Just y) = Just (f x y)
我知道<|>操作符有点类似,但<|>在两个值都存在时会直接丢弃第二个,而我需要的是能传入函数合并两者的版本。
想请教各位:
- 这个
mystery函数有没有标准的名称? - 它属于哪个Haskell类型类?
- 用哪些关键词搜索能找到相关的内容?
内容的提问来源于stack exchange,提问作者crepe_lord
相关产品推荐
相关产品推荐

