3 ms·
Haskell, unless I have a good reason to use something else. An example of a good reason was a recent project which made heavy use of s-expressions, so I learned
by chriswarbo 9y ago
Haskell, unless I have a good reason to use something else. An example of a good reason was a recent project which made heavy use of s-expressions, so I learned Racket to do that and it works reasonably well (required quite a lot of optimisation for a particular loop though!).
As for "frameworks", I find JSON over stdin/stdout to do almost everything I need (Haskell's aeson package is good for this; I might try learning lenses too next time). I also make extensive use of env vars to pass options/config into programs, since I find their semantics (key/value pairs, globally readable, inheritable by child processes, overridable for child processes) more friendy than commandline arguments. Their only downside is being mutable, but that's easy enough to avoid in one's own code.
I also use Nix to manage all building, dependencies, etc. since it's trivial to get code written in many languages to play nicely together (my current project uses Haskell, Bash, Racket, Python, ML and Isabelle). Nix's "Hydra" build server is nice enough for continuous integration, although it's admittedly tricky to set up (it doesn't have proper versions; you need to find a git revision which works :( ).
- pc86 9y agoWhat types of projects are you working on that Haskell + Bash + Racket is the default stack?
- chriswarbo 9y agoStatic/dynamic analysis of code, theorem proving, automated reasoning. Bash is mostly for gluing things together; it's (almost?) all in the form of Nix derivations, and mostly just pipes things around (lots of calls to `jq`).
- wyager 9y ago> I might try learning lenses too next time It's difficult, but worth it. Lenses are super cool. They also play well with Aeson. There's a package lens-aeson that has a bunch of useful stuff. You can actually operate directly on Text values and treat them as JSON structures.
- shae 9y agoHaskell + Spock + Postgres, turns out I'm more productive there than with Python/Flask/postgres, even though I have far more experience in Python.