IBM releases Elm-powered app
Shameless plug - I&#x27;m trying to improve upon Elm and React&#x27;s programming model with my Concur UI framework. Its programming model is a bit unusual, it uses Monads to sequence widgets in time, but it is designed to be extremely simple to use, and you don&#x27;t need to actually understand Monads to use it. An advantage is that it&#x27;s not artificially restricted like Elm, and allows you to use advanced Functional Programming tricks when you can and want to.<p>It is available for [Haskell](<a href="https:&#x2F;&#x2F;github.com&#x2F;ajnsit&#x2F;concur" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;ajnsit&#x2F;concur</a>), [Purescript](<a href="https:&#x2F;&#x2F;github.com&#x2F;ajnsit&#x2F;purescript-concur" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;ajnsit&#x2F;purescript-concur</a>), and [Javascript](<a href="https:&#x2F;&#x2F;github.com&#x2F;ajnsit&#x2F;concur-js" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;ajnsit&#x2F;concur-js</a>) (so no need to learn a new language), and also allows using external React components. The Javascript version uses Async Generators as a substitute for Monads.<p>With Concur, you can implement the entirety of Elm architecture with a few lines of idiomatic code.<p>Purescript or Haskell -<p><pre><code>    elm render update = go
      where go st = do
          action &lt;- render st
          go (update st action)

</code></pre>
Or in JS -<p><pre><code>    function elm(render, update){
      var go = async function*(st) {
        action = yield* render(st);
        yield* go(update(st, action));
      };
      return go;
    }</code></pre>