Since composition is associative I don't specify the order of composition on the rhs.
-In other words, `<=<` is a binary operator that takes us from two members <code>φ</code> and <code>γ</code> of `T` to a composite natural transformation. (In functional programming, at least, this is called the "Kleisli composition operator". Sometimes its written <code>φ >=> γ</code> where that's the same as <code>γ <=< φ</code>.)
+In other words, `<=<` is a binary operator that takes us from two members <code>φ</code> and <code>γ</code> of `T` to a composite natural transformation. (In functional programming, at least, this is called the "Kleisli composition operator". Sometimes it's written <code>φ >=> γ</code> where that's the same as <code>γ <=< φ</code>.)
-<code>φ</code> is a transformation from `F` to `MF'` which = `MG`; <code>(M γ)</code> is a transformation from `MG` to `MMG'`; and `(join G')` is a transformation from `MMG'` to `MG'`. So the composite <code>γ <=< φ</code> will be a transformation from `F` to `MG'`, and so also eligible to be a member of `T`.
+<code>φ</code> is a transformation from `F` to `MF'`, where the latter = `MG`; <code>(M γ)</code> is a transformation from `MG` to `MMG'`; and `(join G')` is a transformation from `MMG'` to `MG'`. So the composite <code>γ <=< φ</code> will be a transformation from `F` to `MG'`, and so also eligible to be a member of `T`.
Now we can specify the "monad laws" governing a monad as follows:
(T, <=<, unit) constitute a monoid
-That's it. Well, there may be a wrinkle here. I don't know whether the definition of a monoid requires the operation to be defined for every pair in its set. In the present case, <code>γ <=< φ</code> isn't fully defined on `T`, but only when `F` is a functor to `MF'` and `G` is a functor from `F'`. But wherever `<=<` is defined, the monoid laws are satisfied:
+That's it. Well, there may be a wrinkle here. I don't know whether the definition of a monoid requires the operation to be defined for every pair in its set. In the present case, <code>γ <=< φ</code> isn't fully defined on `T`, but only when <code>φ</code> is a transformation to some `MF'` and <code>γ</code> is a transformation from `F'`. But wherever `<=<` is defined, the monoid laws are satisfied:
+<pre>
(i) γ <=< φ is also in T
+
(ii) (ρ <=< γ) <=< φ = ρ <=< (γ <=< φ)
+
(iii.1) unit <=< φ = φ (here φ has to be a natural transformation to M(1C))
+
(iii.2) φ = φ <=< unit (here φ has to be a natural transformation from 1C)
+</pre>
If <code>φ</code> is a natural transformation from `F` to `M(1C)` and <code>γ</code> is <code>(φ G')</code>, that is, a natural transformation from `FG` to `MG`, then we can extend (iii.1) as follows:
where as we said <code>γ</code> is a natural transformation from some `FG'` to `MG'`.
-Similarly, if φ is a natural transformation from `1C` to `MF'`, and γ is `(φ G)`, that is, a natural transformation from `G` to `MF'G`, then we can extend (iii.2) as follows:
+Similarly, if <code>φ</code> is a natural transformation from `1C` to `MF'`, and <code>γ</code> is <code>(φ G)</code>, that is, a natural transformation from `G` to `MF'G`, then we can extend (iii.2) as follows:
γ = (φ G)
= ((φ <=< unit) G)
??
= γ <=< (unit G)
-where as we said γ is a natural transformation from `G` to some `MF'G`.
+where as we said <code>γ</code> is a natural transformation from `G` to some `MF'G`.