1. Speed and space can be difficult to predict without considerable experience.
2. The libraries are not as extensive and tested compared to conventional choices such as Java or C++.
Using strict data structures is usually the simplest way to regain predictability:
data QueryExpr
= RelVar !Text
| Restrict !ScalarExpr !QueryExpr
| Select !(HashMap Text ScalarExpr) !QueryExpr
| SummarizeBy !(Vector Text) !(HashMap Text ScalarExpr) !QueryExpr
Excessive strictness can cost you performance if you end up evaluating things you didn’t have to, but ASTs should probably be strict. Using Criterion for benchmarking helps find the sweet spot.
I have found Haskell’s library ecosystem quite good—any time I’ve needed a library, there has been a suitable one. In the rare case that changes are necessary, maintainers tend to be responsive and helpful. We probably just work on different kinds of software.
I have found Haskell’s library ecosystem quite good—any time I’ve needed a library, there has been a suitable one. In the rare case that changes are necessary, maintainers tend to be responsive and helpful. We probably just work on different kinds of software.