Haskell for OCaml programmers
science.raphael.poss.name
science.raphael.poss.name
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.
Some people have just moved on.
There are really dozens of concurrency abstractions you can choose from, and yes, CSP-style programming is an option, available as a library: http://hackage.haskell.org/package/chp - and common abstractions like MVars (which are essentially simple, concurrent 1-place queues) can get you a long way even without that.
There are other libraries for more specific needs; like graph/dataflow based parallelism, array parallelism, GPU-based programming, DSLs for image processing, etc etc.
All that said I'm very happy and hopeful to see OCaml 4.03 adopt multicore support. OCaml has an excellent, robust and lightweight toolchain and implementation, and is very straight-forward and powerful out of the box. It's not my personal cup of tea, but we'd be worse off if they weren't here.
OCaml is not my cup of tea either, but it is really interesting to learn it. If you have any ML like experience than I guess it is less interesting though. The toolchain is great this was one reason I decided to try it out.
Concurrent programming in Haskell is delightful. It gave me a better understanding of how to do it in imperative-land, too.