See following image.

- What do "black-centered squares" mean?
- What do "white-centered squares" mean?
- What do ">"-like shape mean?
- What do "+"-like shape mean?

Answers:

If you have learned Haskell you should have been confused by those rules.

- The first 3 lines mean monad laws.
1. (return x) >>= f == f x

2. m >>= return == m

3. (m >>= f) >>= g == m >>= (\x -> f x >>= g) - Black-centered squares mean monads. (Monad m) => m a
- White-centered squares --- if you put a black circle in them, they become black-centered squares --- mean functions which take something as argument and return a monad. (Monad m) => a -> m b
- Fully white squares mean return :: (Monad m) => a -> m a
- ">"-like shapes mean (>>=) :: (Monad m) => m a -> (a -> m b) -> m b.

It have a black-centered square(monad) on its left-side and a white-centered square(function) on its right side.

You see ">"-like shape on the third line have a white-centered square on its left. A black circle x was removed from a monad (f x >>= g). So it means (\x -> f x >>= g). It seem like (f >>= g) but it cause type error.

It is a little unclear because it is not symmetrical. But if you remove all black circles, those have same structure as 1 * x = x, x * 1 = x, (x * y) * z = x * (y * z)

Now let's see the last 3 lines.

- The last 3 lines mean MonadPlus's law
1. mzero >>= f == mzero

2. m >>= (\x -> mzero) == mzero

3. mzero `mplus` m == m `mplus` mzero == m - Fully black square means mzero.
- "+"-like shape means mplus.
- A black square with white hole, in the other word "A fully black square which was removed a black circle", means (\x -> mzero)

If you remove all black circles again, you'll see these 3 lines have same structure as 0 * x = 0, x * 0 = 0, x + 0 = 0 + x = x.

This figure is very beautiful because it shows mathematical structure behind haskell.

Want to know more about me? Please visit http://www.nishiohirokazu.org/

## No comments:

Post a Comment