+Now we can have as many elements in the result for a given `α` as `k` cares to return. Another way to write `catmap k xs` is as (Haskell) `concat (map k xs)` or (OCaml) `List.flatten (List.map k xs)`. And this is just the definition of `mbind` or `>>=` for the List Monad. The definition of `mcomp` or `<=<`, that we gave above, differs only in that it's the way to compose two functions `j` and `k`, that you'd want to `catmap`, rather than the way to `catmap` one of those functions over a value that's already a list.
+
+This example is a good intuitive basis for thinking about the notions of `mbind` and `mcomp` more generally. Thus `mbind` for the option/Maybe type takes an option value, applies `k` to its element (if there is one), and returns the resulting option value. `mbind` for a tree with `α`-labeled leaves would apply `k` to each of the leaves, and return a tree containing arbitrarily large subtrees in place of all its former leaves, depending on what `k` returned.
+
+<pre>
+[3, 2, 0, 1] >>=<sub>α list</sub> (\a -> dup a a) ==> [3, 3, 3, 2, 2, 1]
+
+ Some a >>=<sub>α option</sub> (\a -> Some 0) ==> Some 0
+ None >>=<sub>α option</sub> (\a -> Some 0) ==> None
+ Some a >>=<sub>α option</sub> (\a -> None ) ==> None
+
+ .
+ / \
+ . / \
+ / \ . . \
+ . 3 >>=<sub>(α,unit) tree</sub> (\a -> / \ ) ==> / \ .
+ / \ a a / \ / \
+1 2 . . 3 3
+ / \ / \
+ 1 1 2 2
+</pre>
+
+
+Though as we warned before, only some of the Monads we'll be working with are naturally thought of "containers"; so in other cases the similarity of their `mbind` operations to what we have here will be more abstract.
+
+
+The question came up in class of **when box types might fail to be Mappable, or Mappables might fail to be MapNables, or MapNables might fail to be Monads**.