Why Haskell?
Perceived strengths of Haskell (the language)
- Strong, expressive type system seen as the main draw: algebraic data types, typeclasses, sum types, and effect tracking enable “making systematic bugs into type errors.”
- Purity and immutability make equational reasoning and refactoring easier; many describe “fearless refactoring” and more robust architectures once things compile.
- Haskell has strongly influenced other languages (Rust, Scala, F#, C#, Java, Elm, TypeScript) even if they don’t fully adopt its model.
- Learning Haskell significantly changes how people think about code, even when they later work mostly in other languages.
- Good fit for some domains: compilers, static analysis, parsers (e.g., Parsec/Pandoc), some back-end services and line‑of‑business apps when teams are bought in.
Tooling, compiler, and debugging
- Many report the current toolchain (GHC, HLS, cabal/stack) as “much better than years ago” but still behind mainstream ecosystems (C#, Java, Rust, .NET, TS).
- Pain points: slow compile times (especially with heavy type features/macros), flaky or slow LSP startup, cabal/stack complexity, and weak IDE/debugger integration compared to JVM/.NET.
- Debugging and profiling are repeatedly called out as poor: runtime flags are awkward, heap/space leaks from laziness are hard to track;
ghc-debugis powerful but feels “pre‑alpha.”
Library and ecosystem concerns
- Biggest criticism is libraries for “enterprise” needs: many are unmaintained, incomplete, or designed around research questions rather than industrial ergonomics.
- Examples: HTTP/Servant ergonomics, strange gaps in error handling and content negotiation, awkward or underpowered bindings to gnuplot, pcap, regex, TLS, etc.
- Lack of “batteries-included” frameworks (Spring/Django‑equivalents) and consistent design/UX across libraries slows MVPs and steepens the learning curve.
Language design debates
- Laziness-by-default is divisive: praised for elegance and some optimizations, but criticized for unpredictable performance and memory behavior.
- Error handling:
Maybe/Eitherand explicit failure are praised vs exceptions, but some find type noise and monad stacks heavy; others argue union types (as in TS/Scala) are more ergonomic. - Effect systems (monad transformers vs newer effect libraries) are powerful but considered complex; guidance for newcomers is inconsistent.
- Dependent types and totality checking are seen as the next frontier; some argue Haskell is now “less bleeding edge” than Agda/Idris/Lean.
Production experience and adoption
- Some report long-term success using Haskell in production (web services, static analysis, fintech), emphasizing productivity and reliability.
- Others tried Haskell for greenfield projects and abandoned it: progress was slower, hiring/teaching juniors was harder, and ecosystem gaps sapped momentum.
- Consensus: Haskell is extremely valuable to learn conceptually; whether it’s a good production choice is highly context‑dependent and remains contentious.