main = do
print $ example
[1, 2] [3, 4] (,) print $ example Nothing
(Just
1) (+) print $ example
(Just
2) (Just
3) (*)
example
:: Monad m
=> m a
-> m a
-> (a
-> a
-> b
) -> m b
example mx my f = do
x <- mx
y <- my
pure $ f x y
bWFpbiA6OiBJTyAoKQptYWluID0gZG8gCiAgcHJpbnQgJCBleGFtcGxlIFsxLCAyXSBbMywgNF0gKCwpCiAgcHJpbnQgJCBleGFtcGxlIE5vdGhpbmcgKEp1c3QgMSkgKCspCiAgcHJpbnQgJCBleGFtcGxlIChKdXN0IDIpIChKdXN0IDMpICgqKQoKZXhhbXBsZSA6OiBNb25hZCBtID0+IG0gYSAtPiBtIGEgLT4gKGEgLT4gYSAtPiBiKSAtPiBtIGIgCmV4YW1wbGUgbXggbXkgZiA9IGRvCiAgeCA8LSBteAogIHkgPC0gbXkKICBwdXJlICQgZiB4IHkK