Difference between revisions of "Simple monad examples"
Jump to navigation
Jump to search
Twobitsprite (talk | contribs) |
m (→Some simple exercises: Redirected link to the Web Archive) |
||
(8 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
− | This page is designed to show some simple examples of using |
+ | This page is designed to show some simple examples of using [[monad]]s, 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: |
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: |
||
Line 11: | Line 11: | ||
<haskell>Just 6</haskell> |
<haskell>Just 6</haskell> |
||
+ | All you really need to know, is that the <code>(>>=)</code> operator either returns <code>Nothing</code> if it is passed <code>Nothing</code> on its left-hand side; or if its left-hand side is a <code>Just …</code> it strips off the <code>Just</code>, and passes the contents into the function supplied on its right-hand side. Simple! |
||
⚫ | |||
+ | |||
⚫ | |||
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> |
||
+ | |||
+ | ---- |
||
+ | More examples can be found in the reference guide [https://web.archive.org/web/20201109033750/members.chello.nl/hjgtuyl/tourdemonad.html A tour of the Haskell Monad functions], by Henk-Jan van Tuyl. |
||
+ | ---- |
||
+ | [[Category:Monad]] |
Latest revision as of 11:16, 22 October 2022
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.