fork download
  1. import Prelude hiding(Maybe(..), lookup)
  2.  
  3.  
  4. data Maybe a = Just a | Nothing deriving (Show)
  5. instance Monad Maybe where
  6. return x = Just x
  7. (Just x) >>= f = f x
  8. Nothing >>= _ = Nothing
  9.  
  10. findSomething :: Maybe Int
  11. findSomething = return 3
  12.  
  13. findSomethingElse :: Int -> Maybe Int
  14. findSomethingElse x = return (x+5)
  15.  
  16. lookup x y = return (x*y)
  17.  
  18. someFailure :: Maybe a
  19. someFailure = Nothing
  20.  
  21. findThemAll :: Maybe Int
  22. findThemAll = do
  23. x <- findSomething
  24. y <- findSomethingElse x
  25. lookup x y
  26.  
  27. findThemAllFail :: Maybe Int
  28. findThemAllFail = do
  29. x <- findSomething
  30. someFailure
  31. y <- findSomethingElse x
  32. lookup x y
  33.  
  34. main = print findThemAll >> print findThemAllFail
Success #stdin #stdout 0s 6220KB
stdin
Standard input is empty
stdout
Just 24
Nothing