Necessary laws
--------------------------------------------
For ◎ to work like composition, we need join to hold the following properties:
- `join (join (F (F (F a))))=join (F (join (F (F a))))`
- abusing notations denoting `join` by ⊙; this is equivalent to
`(F ⊙ F) ⊙ F = F ⊙ (F ⊙ F)`
- There exists `η :: a -> F a` s.t.
`η⊙F=F=F⊙η`