I'd like to put forth Fable as a recommendation.<p>It was briefly mentioned in another comment, but was written off for it's lack of momentum, community, and libraries.<p>I'll respond to these important concerns one by one:<p>Momentum: The fable project began last year. There are still active discussions about tweaks getting it to v1.0, but already there is enough there to make complete applications. There isn't hackernews/reddit hype, but the gitter is busy and there are some using it in production already.<p>Community: I assume that the concern with the community is that it isn't large. F# has never had as large of a community in any of its incarnations compared to mainstream OO-first languages, but the community has always been there to help me out and I've never gone more than a day or two waiting on an answer to a library/language question (most fable related questions are answered very quickly on gitter). The latter fact alone makes it more impressive to me than some other communities. Community is also important because of the amount and variety of libraries that are created for a language. I'd argue that this isn't as important for transpiled languages as it is for separate compiled languages, where for example a ruby library can't be used in python, but I can use any javascript library in fable.<p>Libraries: Library usage is interesting when talking about transpiled languages, and mostly depends on the Dynamic and Foreign interfaces available. Because of Fable's dynamic abilities, I can dynamically call any javascript code I need to. I use this for a couple of libraries in the React-Native application I'm building using Exponent. The other method is Foreign interfaces, which is fantastic in fable because of how the F# type system (and inference) works in the first place. There is a utility to convert from typescript definitions to fable definitions (some will need tweaking afterwards for greater type safety) which adds a ton of libraries itself. I'd argue because of that fact that Fable has more libraries than any other functional-first transpile-to-js language!<p>Here is a example repo I put up earlier with full-stack F# with live-reloading on the client and server.
<a href="https://github.com/Banashek/Universal-FSharp-Samples" rel="nofollow">https://github.com/Banashek/Universal-FSharp-Samples</a><p>I'm using a setup like this on a current project deployed with docker-compose to digitalocean.<p>Full-stack F# has been nice to work with so far.<p>One really nice experience I had was being able to reuse viewmodels and their validators.<p>Android/iOS -> Exponent<p>Web -> Fable-Elmish<p>Server -> Suave<p>I had viewmodels and partial validation functions which could sit in a shared folder and be referenced by all of the projects.<p>I change it in one place, and I can update all 3 instantly.
All of the rest calls depend on the types definition, so I didn't have to do anything after adding a new property to the type and saving the document.
The server reloaded, the frontend reloaded, the mobile app reloaded.<p>I'm not sure If I'll keep it that way, as coordinating production updates is something I haven't fully figured out yet, but for now it's neat to explore.<p>Would I recommend someone who doesn't know functional programming to switch their applications to fable? No.
Would I recommend fable to someone familiar with functional programming looking for a better way to manage their ui? Yes.