Generalize the bunny invasion example in the list monad chapter for an arbitrary number of generations.

— Wikibooks

——————————

`import Control.Monad`

``` generation = replicate 3gen n = foldr (<=<) return (replicate n generation) --- ```

`["bunny"] >>= gen n`

`m >>= g ≡ join (fmap g m)xs >>= f = concat (map f xs) -- for the List Monad`

`---`

`f >=> g= (\x -> f x) >>= g= concat (map g (\x -> f x))`
`--- `
`xs >>= f >=> gxs >>= (f >=> g)xs >>= ((\x -> f x) >>= g)(xs >>= f) >>= g`

``` ```

`xs >>= (return >=> g >=> h)((xs >>= return) >>= g) >>= h`
`--- `
`xs >>= return= concat (map f xs)= concat (map return xs)= concat (map return ["bunny"])= concat ([return "bunny"])= concat ([["bunny"]])= ["bunny"]`
`---`
`-- foldr f acc []     = acc-- foldr f acc (x:xs) = f x (foldr f acc xs)`

``` -- foldr (<=<) return (replicate n generation) ```

`foldr (<=<) return [h,g]= (<=<) h (foldr (<=<) return [g])= (<=<) h ((<=<) g (foldr return []))= (<=<) h ((<=<) g return)= h <=< g <=< return`
`---  `
`compose :: [b -> [b]] -> b -> [b]compose = foldr (<=<) return`

``` ```

`foldr (<=<) return (replicate n generation)= compose (replicate n generation)`

— Me@2015-07-08 11:29:40 PM