title: Computation expressions for a Haskell programmer
body: <p>I'm looking to learn F#, but one thing that's confusing to me is the computation expression (do-notation??) syntax and desugaring.</p>
  
  <p>In haskell, you have a very simple Monad typeclass and rules for desugaring do-notation into bind and return. There's no magic involved in adding keywords; the only thing must match up are the types.</p>
  
  <p>In F# there's a bunch of builders, and keywords, and complexity.</p>
  
  <p>Is there a good explanation of how to map one concept to the other?</p>
  
  <p>I basically want to know how I map</p>
  
  <pre><code>do
    x &lt;- monadicComputation
    foo x
    someOtherMonadicComputation
    let y = somePureComputation x
    return $ bar y
  </code></pre>
  
  <p>to F#.</p>
  
  <p>The only keywords in the haskell are do, (&lt;-) and let.</p>