OT but: suggestions are always welcome.
Stack is in “maintenance” mode though and new features are not actively developed.
It also needs more love wrt HLS integration: Improve stack support for HLS · Issue #6154 · commercialhaskell/stack · GitHub
It lacks backpack support: Backpack for Stack · Issue #2540 · commercialhaskell/stack · GitHub
And more importantly lacks public sublibraries support: Support public sublibraries · Issue #5256 · commercialhaskell/stack · GitHub
While @mpilgrem is doing an excellent job of keeping the project alive, there definitely is a difference in active development between cabal and stack.
I personally like the stack codebase much more than cabals, but the net benefit of writing patches for cabal seems higher at the moment.
You clearly haven’t attended Zurihac then: https://youtu.be/DRFsodbxHQo
These past 3-4 years we’ve seen the rise of HLS, ghcup, and more generally a new era for our tooling.
I think your opinion is not very representitive. Tooling has been one of the major hurdles of Haskell adoption. Stack wasn’t written for fun. GHCup neither: it was written to unify installation methods across different platforms in a Haskell startup.
streamly is fairly new and quite revolutionary.
Did you miss the release of optics?
Lens with better error messages and more “strict” in some cases.
All in all I can’t really agree. Haskell has matured, so of course you won’t see the same amount of novel ideas floating around.
‘Exciting’ only takes you so far. I feel now we’re in a consolidation phase: not as exciting, but things are just getting more robust and more usable. If those years were dedicated to figuring out the amazing things Haskell lets you do, we’re now busy getting them and the language as mature as possible.
Welcome back
There is a new immediate mode GUI library binding dear-imgui.hs.
The haskell-game community held a funny game jam named tiny-games-hs.
There have been many GHC changes not related to the record dot that you mention, you can read the Well-Typed activity reports to get a feel for them. Some highlights:
- Improved C++ support motivated by text-2 which uses C++. Btw text-2 switches internal representation of text from UTF-16 to UTF-8
- New Windows IO manager. See Tamar Christina - The new Windows I/O manager
- Old build system removed in GHC 9.6. Now only the new build system is available, Hadrian. See make-to-hadrian
- HIE files coming to a GHC near you (does “few years” include 4 years?). I believe this provides the some technical underpinnings for HLS that people have mentioned.
- A new Native Code Generator for ARM64. This is still getting fixed up now, see Feb-Mar 2023 report. ARM64 also prompted a recommendation to use capi imports.
Of course there are also release notes and the GHC blog to peruse.
Could you provide a link detailing this? I can’t find anything anywhere.
As someone who stepped away for a while, and is looking at it with fresh eyes, I find improved tooling and ergonomics very exciting. As I mentioned in the OP, I’m about to pitch Haskell to a new team, and making the developer experience with HLS, cabal, and ghcup just work like magic is huge.
I also think that 3-4 years is too short to judge whether a community has lost its ability to innovate. I think it’s reasonable to wait at least 5 for something groundbreaking to happen before giving up hope Other languages are catching up, not because Haskell has stopped innovating, but because they were inspired by it.
Haskell is such a fertile environment to experiment with new ideas, and to my knowledge there isn’t any other language community where it’s even possible in the same way. There are other languages, but this community’s combination of dreamers and pragmatic developers trying to ship something is unique.
I don’t really understand most of these, but I’m so grateful that people are working hard on GHC and these problems. ARM64 support is immediately relatable though! I lost 3-4 days trying to compile a codebase in docker on an M1 mac.
That’s true. Solver-based install plans is a big one. And also vice versa: eg stack supports easy shared/maintained snapshot-based install plans, builtin or ghcup-integrated compiler installation, more windows support, --file-watch.
What’s the better HLS support about, do you know ? [Improve stack support for HLS · Issue #6154 · commercialhaskell/stack · GitHub I guess.]
I believe you @hasufell, thanks for the additional context. Cabal’s dev activity is certainly more visible (at least to me, as someone hanging out in #hackage). As a user, I haven’t noticed significant new features in either in the last year
(cabal release notes, stack release notes). It seems to be a lot of updating and fixing and cleanup (and I believe cabal has had more of that to catch up on).
This is actually one of the big changes in cabal-install recently – since 3.8, cabal-install allows project files to have imports, including remote imports, of other project/freeze/snapshot files – including, e.g. those provided by stackage.
(Further, these can be guarded behind conditionals per compiler-version).
@sclv That sounds possibly very nice. It’s not widely known, I have never run into an example or a how-to demonstrating it, and I can’t easily detect it in the 3.8 or 3.10 release notes. To users, this means it effectively doesn’t exist of course. Documentation is one of the areas where cabal has not yet caught up to stack.
Docs are here: 7. cabal.project Reference — Cabal 3.10.1.0 User's Guide
I know some users are making use of it, because we’ve had a number of tickets filed about it already
So my person professional experience of the last few years is as follows:
- we use
stack
, just because it’s “pin an LTS and you’re good to go” so for a beginning team it was less faff. - GHCup has made installation SO much easier and cleaner (thank you @hasufell)
- HLS has been HUGELY beneficial in productivity.
- unfortunately
stack
is a bit quirky when using HLS (files intest/bench
folders don’t handle dependencies changing very well, so a bit more “Restart HLS” commands) - if you’re comfortable with
cabal
, I’d advise to use that for a better HLS experience
- unfortunately
-
stack
still has a few things thatcabal
doesn’t (like--no-rerun-tests
) which are still a blocker for us to switch tocabal
- We just updated to GHC 9.2 and are excited to be able to use record dot syntax and the non-moving garbage collector (yes, I know it was in 8.10 already, but I think I heard it’s more stable in the more recent versions of GHC)
- The Haskell Foundation’s started making impact. (thank you @david-christiansen)
- Better DevOps for GHC team (thank you @chreekat)
- Bringing together some volunteer teams that think about certain aspects of the future of Haskell
- There’s an error index now at https://errors.haskell.org/ !!! (albeit not comprehensive… yet)
- We’re getting lots of (written) periodic updates on what’s happening wrt:
- Dependent types
- JavaScript / WASM backends
- Core Libraries Committee proposals (thank you @ChShersh)
- GHC DevOps
- GHC development (I think mostly by Well-Typed? IOHK? Maybe another I’m forgetting?)
There’s bound to be stuff I’m still forgetting, but I’m super happy with where Haskell’s going at the moment
CLC proposals, I believe.
Ah, yes, apologies, I somehow keep mixing those up > .<
In my head they’re both under “That committee concerning the core parts of the language”
I also feel like the improvements to HLS are the biggest change over the past few years. I do understand @maxigit 's point, too, though. If you asked me ~5 years ago what I’d hope for from a period of consolidation, the first thing is improved tooling, and we’ve had that with ghcup
, HLS, and improvements to cabal
. These are great changes, but our tooling is not so good that it makes a standalone argument for choosing Haskell over some other language. This work had to happen, and I’m thankful for it, but what of the package ecosystem?
I’d have hoped that streaming would be closer to settled, smoothing over the rifts between conduit
, pipes
, and other contenders, but that hasn’t really happened. For new code, you’ve got good options, but you’re likely to find something you’d like to use that will involve bridging between streaming libraries.
I’d have hoped that folks would rally around an approach to effects, as this is an area where Haskell is still more capable than most alternatives. This part of writing a new program always faces a big YAGNI question that I wish Haskell had a great answer for, something that lets you get started without any UX compromises made in the name of preventing bugs you can’t yet create. Maybe this can still happen, but it turns out we weren’t on the cusp of a decisive development.
As a reach, I had hopes that linear types would sweep over the core libraries like a wave, and we’d see more examples of programs with really tight memory usage. But, unsurprisingly, that change has proved to require a lot of work with not so many hands to do it.
Rust has undoubtedly absorbed some of Haskell’s excitement, in part by being so informed by Haskell, so this is not such a bad thing. I think Haskeller’s should absolutely try Rust. It’s great to use a compiler that works hard to help you, while also having access to an ecosystem benefitting from money and size. As for Haskell, it’s still the nicest place to write functional code, and with the improved tooling it has a much more modest barrier to entry.