Simple monad examples: Difference between revisions

From HaskellWiki
m (Fixed grammar (it's -> its))
m (Minor formatting changes)
Line 13: Line 13:
All you really need to know, is that the >>= operator either returns "Nothing" if it is passed "Nothing" on its left-hand side; or if its left-hand side is a "Just ..." it strips off the just, and passes the contents into the function supplied on its right-hand side. Simple!
All you really need to know, is that the >>= operator either returns "Nothing" if it is passed "Nothing" on its left-hand side; or if its left-hand side is a "Just ..." it strips off the just, and passes the contents into the function supplied on its right-hand side. Simple!


Some simple exercises:
===Some simple exercises===


What would the following snippets resolve to?
What would the following snippets resolve to?


<haskell>
* <haskell>
Just 0 >>= (\ x -> if (x == 0) then fail "zero" else Just (x + 1) )
Just 0 >>= (\ x -> if (x == 0) then fail "zero" else Just (x + 1) )
</haskell>
* <haskell>
Nothing >>= (\ x -> if (x == 0) then fail "zero" else Just (x + 1) )
Nothing >>= (\ x -> if (x == 0) then fail "zero" else Just (x + 1) )
</haskell>
</haskell>

Revision as of 21:46, 5 April 2021

This page is designed to show some simple examples of using monads, specifically using Maybe.

I personally found that I reached monad-enlightenment once I contrived this simple example while playing around to see the "guts" of a monadic expression:

Just 5 >>= (\ x -> if (x == 0) then fail "zero" else Just (x + 1) )

Which results in:

Just 6

All you really need to know, is that the >>= operator either returns "Nothing" if it is passed "Nothing" on its left-hand side; or if its left-hand side is a "Just ..." it strips off the just, and passes the contents into the function supplied on its right-hand side. Simple!

Some simple exercises

What would the following snippets resolve to?

  • Just 0 >>= (\ x -> if (x == 0) then fail "zero" else Just (x + 1) )
  • Nothing >>= (\ x -> if (x == 0) then fail "zero" else Just (x + 1) )

More examples can be found in the reference guide A tour of the Haskell Monad functions, by Henk-Jan van Tuyl.