Let us say, I have two Maybe Bool value and I want to achieve the following functionality:
- If both are
Justvalues, I want to perform an||between them the values. - If one of them is
Nothingand the other one isJustvalue, then I want theJustvalue as the output. - If both of them is
Nothing, then I wantJust Falseas the output.
I know that this can be achieved using pattern matching. But is it possible to use any monadic functions to acheive the result ?
liftM2 works for this case:
ghci> liftM2 (||) (Just True) (Just False)
Just True
But liftM2 will produce Nothing when any of the one input is Nothing (for which I want the other Just value). i.e:
ghci> liftM2 (||) (Nothing) (Just False)
Nothing
But I want Just False in the above case.
Is it possible to do this using any monadic function ?