左同一性 (left identity)

(return x) >>= f    ==    f x

return>>= に対してほとんど単位元である.

f で移される前に何度上下に写しても結果は変わらない.

Category'

    +-----+            +-----+
    | m X |            | m Y |
    +-----+            +-----+
    |  mx |            |  my |
    +-----+            +-----+
       ^ : >>=         ^
return | :       f    /
       | :   +-------+
       | :  /
       | v /
    +-----+            +-----+
    |  X  |            |  Y  |
    +-----+            +-----+
    |  x  |            |  y  |
    +-----+            +-----+

Category

右同一性 (right identity)

my >>= return    ==    my

return>>= に対してほとんど単位元である.

(移された後に) 何度上下に写しても結果は変わらない.

Category'

+-----+            +-----+
| m X |            | m Y |
+-----+            +-----+
|  mx |            |  my |
+-----+            +-----+
                   ^ : ^
             f    /  : | return
         +-------+   : |
        /        >>= : |
       /             v |
+-----+            +-----+
|  X  |            |  Y  |
+-----+            +-----+
|  x  |            |  y  |
+-----+            +-----+

Category

結合性 (associativity)

(mx >>= f) >>= g    ==    mx >>= (\x -> f x >>= g)

2 つの関数 fg を連続して bind するのは、これらの関数から定まる一つの関数を bind することと等しい.

Category'

+-----+            +-----+            +-----+
| m X |            | m Y |            | m Z |
+-----+            +-----+            +-----+
|  mx |            |  my |            |  mz |
+-----+            +-----+            +-----+
   : >>=           ^  : >>=           ^  ^
   :         f    /   :         g    /  /
   :   +---------+    :    +--------+  / (\x -> f x >>= g)
   :  / +------------ : - / ----------+
   v / /              v  /
+-----+            +-----+            +-----+
|  X  |            |  Y  |            |  Z  |
+-----+            +-----+            +-----+
|  x  |            |  y  |            |  z  |
+-----+            +-----+            +-----+

Category