
Dear List, I've been stumped for a few months on the following example, from chapter 13 of LYH http://learnyouahaskell.com/for-a-few-monads-more#useful-monadic-functions runState (join (State $ \s -> (push 10,1:2:s))) [0,0,0] I find the following implementation of join in the text is hard to understand or apply join :: (Monad m) => m (m a) -> m a join mm = do m <- mm m In contrast, I find the following definition(?) on Haskell Wikibooks https://en.wikibooks.org/wiki/Haskell/Category_theory#Monads join :: Monad m => m (m a) -> m a join x = x >>= id easier to understand, and although I can apply it to the following Writer Monad example, in the same section of LYH, runWriter $ join (Writer (Writer (1,"aaa"),"bbb")) I cannot apply it to the State Monad example. Regards, - Olumide