Avoiding using the "M-word" and pretending they're just "recipes" is going to cause confusion when these new Haskell programmers see someone using the list monad.
I don't understand this almost religious need to rename things. It's a monad, call it a monad. People don't know what it is? Well, explain what it is to them. If you hide the real name from them they're going to be confused later.
It's also very strange and unhelpful to tell people that ; in Haskell ("inside a do block") and OCaml are equivalent. The closest equivalent thing in Haskell is (>>), which sequences two monad operations together, discarding the result of the first. Alongside that, there's (>>=), which sequences two monad operations and passes the result of the first operation to your function. From there, you can then introduce do-notation, which is just syntactic-sugar. This way, you avoid newcomers being confused about what `do` does: https://wiki.haskell.org/Do_notation_considered_harmful#Dida...
So `p1 (); p2 ()` would be better translated into Haskell as `main = p1 >> p2`. And in `main = do putStrLn "world"`, the `do` is redundant.
I don't understand this almost religious need to rename things. It's a monad, call it a monad. People don't know what it is? Well, explain what it is to them. If you hide the real name from them they're going to be confused later.
It's also very strange and unhelpful to tell people that ; in Haskell ("inside a do block") and OCaml are equivalent. The closest equivalent thing in Haskell is (>>), which sequences two monad operations together, discarding the result of the first. Alongside that, there's (>>=), which sequences two monad operations and passes the result of the first operation to your function. From there, you can then introduce do-notation, which is just syntactic-sugar. This way, you avoid newcomers being confused about what `do` does: https://wiki.haskell.org/Do_notation_considered_harmful#Dida...
So `p1 (); p2 ()` would be better translated into Haskell as `main = p1 >> p2`. And in `main = do putStrLn "world"`, the `do` is redundant.