Haskell. It’s a fantastic language for writing your usual run of the mill DB-backed web APIs and can do a lot of things that other languages simply can’t (obviously not in terms of computation, but in terms of what’s possible with the type system).
I’ve been writing it professionally for a while and am very happy with it. Would be nice if the job market for it was a bit broader. You can definitely get jobs doing it, you just don’t have quite as broad of a pool to choose from.
Here’s what I remember from Haskell (around 2018):
I love the language, but hate the tooling.
Used it for Uni (did a minor where I learned Haskell, recursion, parsing and regex - probably the most information dense part of school I’ve ever had. Half a year of minor also burned me out, so I never went for my masters; I’m OK with my Bachelors :D ), but never felt like picking it back up.
The tooling has improved dramatically since then. There’s now a full-fledged language server (https://haskell-language-server.readthedocs.io/en/stable/), ghcup (https://www.haskell.org/ghcup/) is now a thing for installing/managing different versions of GHC/cabal/HLS, there’s now formatters (https://github.com/tweag/ormolu) and cabal has modernized significantly and supports multi-package projects much more comfortably now. Nix-based Haskell infrastructure is also now pretty nice. There’s even stuff like https://github.com/srid/haskell-template/blob/master/flake.nix to very quickly get spun up on a new project using Haskell and nix, including vscode, formatter, HLS, and a full development shell with a bunch of useful commands.
Another great modern thing (which powers HLS) is that GHC can now emit .hie files for each file it compiled, which is basically a standardized representation of the AST for that module that can be consumed/manipulated programatically. Lots of tools can use this. One such tool that’s particularly useful is https://github.com/wz1000/HieDb, which constructs an sqlite database from the information in these files, so you basically can have an index of every symbol definition, reference, export, etc. all readily available to use however you want.
The problem with Haskell is how unnecessarily complicated everything around it gets. Preludes, monads, monoids, functors, algebraic datatypes, and all that jazz. It feels like nobody in the Haskell community can explain anything without using a bunch of terms nobody else knows. Even guides and books written for imperative programmers start throwing terms around with examples only in Haskell. It’s being an intern at a company and getting told to use the thingamabob to circumvolicate the badinga with a microgalic twist to the faddle, and when asking “uh, what are those?” getting a detailed answer just using more lingo.
Many programming languages have included parts of the functional programming paradigm with lambdas, higher-order functions, and more expansive typing systems, but they explain them so much better than any Haskell book or programmer ever has to me.
If Haskell documentation, guide, tutorial, and book writers with imperative programming language experience actually tried to put themselves in the shoes of newbies, tried to remember what it was like being dumb to Haskell and the computer science theory behind it, maybe more programmers would be open to discovering the promised land and walking up that hill instead of climbing a cliff.
Pff, easy. Monad is a programming pattern for creating functions that return wrapper types with additional computations. Or, in layman’s terms, “When no monad, thing happen. When monad, thing happen, BUT ALSO another thing happen.”
Haskell. It’s a fantastic language for writing your usual run of the mill DB-backed web APIs and can do a lot of things that other languages simply can’t (obviously not in terms of computation, but in terms of what’s possible with the type system).
I’ve been writing it professionally for a while and am very happy with it. Would be nice if the job market for it was a bit broader. You can definitely get jobs doing it, you just don’t have quite as broad of a pool to choose from.
Here’s what I remember from Haskell (around 2018):
I love the language, but hate the tooling.
Used it for Uni (did a minor where I learned Haskell, recursion, parsing and regex - probably the most information dense part of school I’ve ever had. Half a year of minor also burned me out, so I never went for my masters; I’m OK with my Bachelors :D ), but never felt like picking it back up.
The tooling has improved dramatically since then. There’s now a full-fledged language server (https://haskell-language-server.readthedocs.io/en/stable/),
ghcup
(https://www.haskell.org/ghcup/) is now a thing for installing/managing different versions of GHC/cabal/HLS, there’s now formatters (https://github.com/tweag/ormolu) and cabal has modernized significantly and supports multi-package projects much more comfortably now. Nix-based Haskell infrastructure is also now pretty nice. There’s even stuff like https://github.com/srid/haskell-template/blob/master/flake.nix to very quickly get spun up on a new project using Haskell and nix, including vscode, formatter, HLS, and a full development shell with a bunch of useful commands.Another great modern thing (which powers HLS) is that GHC can now emit
.hie
files for each file it compiled, which is basically a standardized representation of the AST for that module that can be consumed/manipulated programatically. Lots of tools can use this. One such tool that’s particularly useful is https://github.com/wz1000/HieDb, which constructs an sqlite database from the information in these files, so you basically can have an index of every symbol definition, reference, export, etc. all readily available to use however you want.do you know any open source projects that use Haskell?
https://www.shellcheck.net/ is probably one of the biggest.
https://simplex.chat/is written entirely in Haskell.
https://pandoc.org/ is another big one.
https://serokell.io/blog/best-haskell-open-source-projects has a (non-exhaustive) list of a bunch more.
The problem with Haskell is how unnecessarily complicated everything around it gets. Preludes, monads, monoids, functors, algebraic datatypes, and all that jazz. It feels like nobody in the Haskell community can explain anything without using a bunch of terms nobody else knows. Even guides and books written for imperative programmers start throwing terms around with examples only in Haskell. It’s being an intern at a company and getting told to use the thingamabob to circumvolicate the badinga with a microgalic twist to the faddle, and when asking “uh, what are those?” getting a detailed answer just using more lingo.
Many programming languages have included parts of the functional programming paradigm with lambdas, higher-order functions, and more expansive typing systems, but they explain them so much better than any Haskell book or programmer ever has to me.
If Haskell documentation, guide, tutorial, and book writers with imperative programming language experience actually tried to put themselves in the shoes of newbies, tried to remember what it was like being dumb to Haskell and the computer science theory behind it, maybe more programmers would be open to discovering the promised land and walking up that hill instead of climbing a cliff.
Anti Commercial-AI license
As soon as you understand monads, you immediately lose the ability to explain them to somebody who doesn’t.
Pff, easy. Monad is a programming pattern for creating functions that return wrapper types with additional computations. Or, in layman’s terms, “When no monad, thing happen. When monad, thing happen, BUT ALSO another thing happen.”
😂 that’s inconvenient
Anti Commercial-AI license