It is available for [Haskell](https://github.com/ajnsit/concur), [Purescript](https://github.com/ajnsit/purescript-concur), and [Javascript](https://github.com/ajnsit/concur-js) (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.
With Concur, you can implement the entirety of Elm architecture with a few lines of idiomatic code.
Purescript or Haskell -
elm render update = go
where go st = do
action <- render st
go (update st action)
Or in JS - function elm(render, update){
var go = async function*(st) {
action = yield* render(st);
yield* go(update(st, action));
};
return go;
}