3 ms·
I have tried to push for a Haskell in my previous job. We had a task that was especially well suited for that. It was a large collection of mostly declarative c
by tomas789 4y ago
I have tried to push for a Haskell in my previous job. We had a task that was especially well suited for that. It was a large collection of mostly declarative computations for the mixed-integer optimization. I also wanted to take an advantage of Liquid Haskell since that would allow us to move a few checks from runtime to compile time. That would be a game changer. Things like divide by zero were very common. It is easy to detect division by zero but not so easy to cover all the edge cases that could cause it.
At the end of the day we did not go forward with that. The reasons mostly were:
1. Even though I used a lot of my "social credit" on this everybody was scared of it. Mostly because of the vibe that comes with Haskell.
2. Purely functional languages come with lots of concepts that are unfamiliar to most programmers (everybody in my team was well equipped with CS degree and theoretical knowledge but still those concepts were new-ish).
3. The higher in company hierarchy the more people were scared (this was a critical project for the whole company of ~22k people).
4. We couldn't figure out debugging. Our codebase was ~40k generated lines of code (type definitions, basic accessor functions and so on) plus ~10k LoC we would write on top of that. The only VSCode-based debugging I was able to figure out was basically loading it in GHCi and then doing the debugging which was fine. The problem was the load itself. It took ages because it recompiled majority of the codebase on load. No precompiled parts were used. Result was that every debugging session took minutes to start up.
On the other hand Liquid Haskell has a great potential and I hope that there is a future in which we have similar tools in more common languages. As the complexity of the codebase grows it become more important to have a tool to provide additional guarantees. We did not have much of the code on its own but it was packed with complexity and dependencies. Liquid Haskell seemed to provide a tool that does not get into your way when you don't need it but it available when you want it.