Difference between revisions of "Simple monad examples"
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 lefthand side; or if its lefthand side is a "Just ..." it strips off the just, and passes the contents into the function supplied on its righthand side. Simple! 
All you really need to know, is that the >>= operator either returns "Nothing" if it is passed "Nothing" on its lefthand side; or if its lefthand side is a "Just ..." it strips off the just, and passes the contents into the function supplied on its righthand 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 monadenlightenment 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 lefthand side; or if its lefthand side is a "Just ..." it strips off the just, and passes the contents into the function supplied on its righthand 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 HenkJan van Tuyl.