data Maybe a
= Just a
| Nothing
deriving (Show) (Just x) >>= f = f x
Nothing >>= _ = Nothing
findSomethingElse x
= return (x
+5)
someFailure = Nothing
findThemAll = do
x <- findSomething
y <- findSomethingElse x
findThemAllFail = do
x <- findSomething
someFailure
y <- findSomethingElse x
aW1wb3J0IFByZWx1ZGUgaGlkaW5nKE1heWJlKC4uKSwgbG9va3VwKQoKCmRhdGEgTWF5YmUgYSA9IEp1c3QgYSB8IE5vdGhpbmcgZGVyaXZpbmcgKFNob3cpCmluc3RhbmNlIE1vbmFkIE1heWJlIHdoZXJlCiAgcmV0dXJuIHggPSBKdXN0IHgKICAoSnVzdCB4KSA+Pj0gZiA9IGYgeAogIE5vdGhpbmcgPj49IF8gID0gTm90aGluZwoKZmluZFNvbWV0aGluZyA6OiBNYXliZSBJbnQKZmluZFNvbWV0aGluZyA9IHJldHVybiAzCgpmaW5kU29tZXRoaW5nRWxzZSA6OiBJbnQgLT4gTWF5YmUgSW50CmZpbmRTb21ldGhpbmdFbHNlIHggPSByZXR1cm4gKHgrNSkKCmxvb2t1cCA6OiBJbnQgLT4gSW50IC0+IE1heWJlIEludApsb29rdXAgeCB5ID0gcmV0dXJuICh4KnkpCgpzb21lRmFpbHVyZSA6OiBNYXliZSBhCnNvbWVGYWlsdXJlID0gTm90aGluZwoKZmluZFRoZW1BbGwgOjogTWF5YmUgSW50CmZpbmRUaGVtQWxsID0gZG8KICB4IDwtIGZpbmRTb21ldGhpbmcKICB5IDwtIGZpbmRTb21ldGhpbmdFbHNlIHgKICBsb29rdXAgeCB5CgpmaW5kVGhlbUFsbEZhaWwgOjogTWF5YmUgSW50CmZpbmRUaGVtQWxsRmFpbCA9IGRvCiAgeCA8LSBmaW5kU29tZXRoaW5nCiAgc29tZUZhaWx1cmUKICB5IDwtIGZpbmRTb21ldGhpbmdFbHNlIHgKICBsb29rdXAgeCB5CiAgCm1haW4gPSBwcmludCBmaW5kVGhlbUFsbCA+PiBwcmludCBmaW5kVGhlbUFsbEZhaWw=