Hey man,
I think you and I might have a similar sort of outlook. I like the purity of FP. Where we might differ though; in the end, I need to get shit done.
Why did I even switch away from TS? Well, first I actually went back to JS - believe it or not. I realized that TS doesn’t really do anything for me. It’s just JS with type annotations, they don’t help me much. I needed something more FP-ish. Hello, ReScript.
I like it because it’s strict, but it doesn’t try to turn practical problems into mathematical abstractions. I.e., it’s pragmatic. I think it should be even more pragmatic. See this: When helpful becomes hurtful - some areas where ReScript is problematic - #5 by philiparvidsson
Notice how I speak about “warts.” ReScript is full of them and will likely gather more. Why? Because it’s pragmatic. You bend the rules to fit the need. That might not play well with your mindset - it seems you’re looking for something pure. If that’s your cup of tea - then I think you should maybe try PureScript (I never heard of FP-TS before). I like the idea of it, but in practice, simple things become too complex for me to get stuff done in a feasible amount of time. Maybe I’m not smart enough for pure FP, I don’t know.
I don’t know about FP-TS, so let me compare to PureScript:
You would have to give up beautiful code. Good lord ReScript is ugly and full of warts. In the stdlib and JS stdlib (Belt.Array, Js.Array, Js.Array2, object, object_, exec_ and all sorts of weird names - likely these will be cleaned up at some point). And promises (then, thenResolve, all, all2, etc). But there are benefits to this as well: It makes you read code carefully (this is more compared to JS/TS).
As for lacking features - no, absolutely not. You will have them in ReScript too, but they will not be anywhere as beautiful to look at. The pink tools analogy is actually not that bad, but maybe I would put it this way: Imagine two plumbers. One of them has clean, white clothes and a toolbox with polished, shiny tools. He’s very careful doing your plumbing work, doing things neatly and not getting anything dirty. His name is probably Gifuncio and he’s probably a handsome italian or something.
Then there is Mr. Replumbo. His clothes are dirty, his tools are dirty, but he’s also an expert. He gets stuff done for you without hesitation, but his tools are not shiny.
Doing a commercial or some theoretical setup, Gifuncio is probably my pick. For any real-world plumbing projects, I’ll be calling Mr. Replumbo.
Does that sort of make you understand how I view the difference?
Are you programming for a living and need to get stuff done, or do you do write papers for research or experimental hobby projects? Do you program to solve practical problems or to write beautiful code? These are not mock questions - both sides are fine, I’m just trying to help you think about this.
If you want to write beautiful code, I would never, ever pick ReScript. I could even argue regular JS probably can look better. But ReScript helps me get stuff done.
The only runtime errors I’ve had so far are due to me writing bad bindings/externals. In the future, when we have ready-made and well-tested bindings, things will be different. I think ReScript is on to something, but I can also see why it’s off-putting for some.