如果两个参数都是Just,则Haskell函数返回Just对值,否则为Nothing

Suz*_*dın 4 haskell maybe

定义一个函数

   pairMaybe :: Maybe a -> Maybe b -> Maybe (a,b)
Run Code Online (Sandbox Code Playgroud)

产生一个Just仅当两个参数都是结果Just,并且Nothing如果任一参数是Nothing.

我想出来:

pairMaybe (Just a) (Just b) = Just (a,b)
pairMaybe (Just a) Nothing = Nothing
pairMaybe Nothing (Just b) = Nothing
Run Code Online (Sandbox Code Playgroud)

我不确定这是否是正确的写作方式.这有什么问题或者这是定义这个功能的方法吗?

另外我想我可能想要更好地解释这个函数实际上可以做什么,所以如果我pairMaybe用两个参数调用,它们可以是什么参数?当然,他们必须是类型Maybe,但什么是一个很好的例子?

Fre*_*abe 19

通过模式匹配来做这件事很好; 你可以通过使用来简化你的代码

pairMaybe :: Maybe a -> Maybe b -> Maybe (a,b)
pairMaybe (Just a) (Just b) = Just (a,b)
pairMaybe _        _        = Nothing
Run Code Online (Sandbox Code Playgroud)

话虽这么说,你的函数实际上只是将(,)函数(创建2元组)提升到Maybemonad中,所以你也可以写

pairMaybe :: Maybe a -> Maybe b -> Maybe (a,b)
pairMaybe = liftM2 (,)
Run Code Online (Sandbox Code Playgroud)


Sim*_*ser 6

您错过了两个值都是的模式Nothing(与您的任何模式都不匹配):

pairMaybe Nothing Nothing = Nothing
Run Code Online (Sandbox Code Playgroud)

除了模式匹配之外,还有一种在Haskell中完成工作的好方法.