Hacker News new | past | comments | ask | show | jobs | submit login
My views on NeoHaskell (haskellforall.com)
124 points by galfarragem on Oct 2, 2023 | hide | past | favorite | 93 comments



This article pretty well matches my own reaction to seeing the Neohaskell web site a few minutes earlier, from clicking a nearby HN post about it. Too much song and dance, too much Discord, not enough plain explanations instead of cute graphics, no convincing vision that any version of Haskell can be anything other than a language for nerds, and also no explanation of why we nerds shouldn't want to use a nerdy language that we can nerd with, instead of this weird attention seeking thing. Hipsters already have Ruby after all. Can't they just use it?

I even felt something like that about Yesod, so Gabriella's mention of Stack seemed apropos. In Yesod's case, the author (Michael Snoyman, also author of Stack) was at least an extremely knowledgeable and productive Haskeller, even if some of the decisions in Yesod came across as dubious for purists. Neohaskell has far less substance behind it.


I hate the "everything interesting happens on Discord" thing some of these "hip" projects are doing.

Why are we putting everything in a data silo controlled by a company with pretty draconian policies? There's so many open discussion platforms available - why use the worst one?


Because the open community is apparently incapable of making a system with good UX. Try it and you'll get a bunch of people complaining that inline images are bloat and who needed an auth system anyway and why can't I use my IRC client from 1996 and your client wasn't supposed to use my RAM, I'm saving that for guests.

If and when those open discussion platforms manage to match the UX of Discord, I'm sure people will be happy to switch. But I'm not sure it'll ever happen.


I think the only way to get an “open discord” is for some hero programmer to write it then release it as open source more or less fully formed, have it go viral, then play BDFL - i.e. the Python/Linux model.


https://github.com/revoltchat looks pretty promising!


Matrix. It has an IRC bridge.


Yeah, I have high hopes for Matrix, but I don't think they're quite there yet (although I haven't used the release from a week or two back that is allegedly a major step forward).


> why use the worst one?

Because functionality wise, it's the best one. And the most popular one. Even among programmers people who will sacrifice that for idealogical purity are a minority.


I disagree. To me, Discord is a huge barrier. I use it when I have to. But it‘s bloated, slow and complicated. I don’t want to run it constantly because of that, and it takes very long to start up.

The machine I use is fairly recent btw. I get distracted and frustrated by slow programs. If you run enough of them, you get compounding issues. It’s not fun!

Aside from that, I do agree with GP 50%. However I absolutely use and promote proprietary software when it’s good quality.


> I disagree. To me, Discord is a huge barrier. I use it when I have to. But it‘s bloated, slow and complicated. I don’t want to run it constantly because of that, and it takes very long to start up.

Yea man, that's a you problem. Discords popularity speaks to how little of a problem any of that is for other people.

Anecdotal I've never thought of Discord as slow or "complicated".


"If its popular, it just simply must be good," is such a poignant conceit these days. Like a portal to twenty years ago.


It is good. I use discord all the time. We can make our own servers for free, easily invite people, talk in text or voice or even stream video.

I also enjoy using discord for programming, it has awesome support for code blocks and all kinds of stuff.

At work we use slack, I'd take discord over slack any time.

That's not to say I think it makes sense for a programming language or library to use discord servers instead of documentation. Documentation is a minimum requirement in my book. But if they also have a discord server, I might consider visiting it.


Everyone knows the enshittification of Discord is only a matter of time and that it is inevitable. Arguably, it has already started.

I guess most people don´t care that much about participating in forums that are, for all practical purposes, essentially ephemeral. Not only is the search abysmally bad, we all know the data will vanish eventually.

I genuinely think this is how people roll. The willingness to do something that can remain useful 20 years from now is relatively rare. Sometimes speaking about this topic to others, it's like they don't even acknowledge there's a problem to begin with.


> I guess most people don´t care that much about participating in forums that are, for all practical purposes, essentially ephemeral

For me at least, chat in general is ephemeral - I don't care about history past the last couple hours - the same way as I don't record regular conversations with people and listen to them later.

For this reason I'm much less concerned about vendor lockin with a chat solution than I would be with email or more forum type stuff - if Discord starts sucking I don't lose anything by moving to something new (assuming it sucks enough for the communities I'm in to move too).


I don't know if there are alternative clients, but default ui is messy as f. I don't care about functionnality if just searching for stuff is so terrible.


Alternative clients are explicitly prohibited by the ToS and will get you banned.


And every person that tried to make a FOSS one got a cease & desist. This sort of accessibility & developer hostility should clue in projects as to why they should choose a better option.


Yup, people are really setting themselves up for losing a ton of important data and context in a knowledge silo they don't control.


Unity is the best game engine. People who will sacrifice that for ideological purity are a minority. I'm sure that will work out great for them.


This is an awful analogy. People aren't dropping unity for ideological purity, they're dropping it because unity is making real changes that actively screw over their customers.


That's exactly what parent is pointing out, it just flew over your head.

People saying Unity was not a good choice because it's closed source and controlled by one private company were laughed off as ideologues. Then what they warned about happened.

Now the same kind of people are getting the same kind of response. Maybe that "ideology" is based on practical considerations after all?


> People saying Unity was not a good choice because it's closed source and controlled by one private company were laughed off as ideologues.

I kinda feel like including what Unity pulled recently in your "private company threat model" is a bit overkill - I'm generally comfortable assuming that private companies aren't going to do something quite that self destructive and braindead.

Based on prior behaviour I wouldn't trust anything google develops to not get canned within a year or two, I'm very weary of anyone trying to monetize open source projects, and building a business on top of someone else's saas product seems pretty risky.

But commercially licensed development tooling that I'm using to produce my own binaries is pretty low on my list of concerns - most companies aren't as bugfuck insane as Unity's current management seems to be.

And just using some closed source product for which the switching cost is effectively zero (for me - see other comment in this thread about chat being ephemeral) seems like a no brainer.


Anything I don't like is ideology and contrarianism, sorry.


Wrong. The point is that you could have seen it coming.

And you sow the seeds of it happening again when you think of opposition to Discord as an ideological stance, rather than one that promotes a practical structure which guards against a company deciding to screw you over.


Discord is where the creative energy is right now, for better or for worse.


I disagree. Lots of communities, e.g. Julia or Stan, use https://www.discourse.org. Discourse is GPL2 and emulates old Internet forums.


> emulates old Internet forums.

Extremely poorly.

I am on 2 or 3 instances, and I cordially loathe it.

Compared to mailing lists, it's a grotesquely over-complicated mess.

To make a comparison with text editors:

Discourse for a mailing list user is like telling a skilled expert in Vim or Emacs...

"Now, to join our community, all you have to do is install a Windows 11 VM and use MS Word 365 for all your editing! Some new users prefer the toolbar. It does all the stuff you're used to and like, but it has a cool new UI! It's great! We all love it and we are sure you will too! We looked at your old system and we have made sure we've included all the old functionality! You can move the cursor left, right, up and down, but now, you can also use an animated GIF or PNG as your cursor and have a choice of colours!"


To quote a sibling comment to yours:

> Try it and you'll get a bunch of people complaining that inline images are bloat and who needed an auth system anyway and why can't I use my IRC client from 1996 and your client wasn't supposed to use my RAM, I'm saving that for guests.


Nah, I wrote that and Discourse is the worst of both worlds, it's somehow even less usable than old-style forums. I don't exactly love e.g. XenForo but it's better than Discourse in every way.


Browser support is extremely limited --- I couldn't find a browser which would allow selecting text with a stylus rather than scroll in Windows 11 (there are still a couple) which would also work with Discourse when I was looking such a thing.


Ngl i'm very willing for languages to cater to my CQRS needs. Boilerplate city amirite?


Did you ever look at Adam Chlipala's Ur/Web? That was really something. Look for wayback machine snapshot of impredicative.org.



My initial reaction to the first few excerpts from neohaskell's website was: "Wait?! Are you guys already forking Simple Haskell[1] before Simple Haskell even has any traction??"

In one hand neohaskell is not that dumb, but on the other hand it's not much better either. I believe that if you are going to make a claim that ambitious you need to post more than a website and a discord, you need an actual PoC.

[1] https://www.simplehaskell.org/


Simple Haskell never was anything real lol. It's main accomplishment is becoming a derogatory term.


I think its great that someone is trying to make haskell not suck to use. Better still that its very ambitious as it means people will learn much if or when it doesn't meet its aspirations.


In my humble opinion (I'm still new to Haskell), the best way to do that is to contribute to existing Haskell tooling.

That's something I'm looking into doing myself. It would be great to help improve tools like cabal and the haskell-language-server.

I think that will go a long way towards making Haskell more beginner-friendly, and easier to use in production.


Yeah, but if they want to break compatibility with Haskell (GHC).. I think that's a significant drag, and I am very skeptical of that. I think Haskell's extension mechanism has shown that language can improve significantly without breaking changes. Furthermore, I don't see much in their goals which would require a departure from GHC compatibility, it's mostly about tooling.


In my mind ghc extensions are one of the biggest barrier to entry for learning haskell. Tutorials typically mention them a bit at the end but they have a huge impact on the language and are used by most libraries.


I think Stephen Diehl's What I wish I knew about Haskell is an excellent overview. (Although no longer maintained, I wish he continued with Haskell and drop his worries about crypto.)

Personally, I use ClassyPrelude and only a handful of extensions.


I see this comment a lot, but I don't understand why. I dove into Haskell and I didn't need to thoroughly understand each extension to be productive. Even the ones I turned on because a library asked me to.


Haskell already doesn't suck to use! And it's still improving. Cabal is really solid nowadays, for instance.


Yup Haskell is those kinda languages that you always wanna learn but then hit bumb when you actually try to do something more complex than monad tutorial with it. I will definitely test this if it is something like Haskell--.


Same. I wasn't aware of NeoHaskell before this little drama stint but now I'm quite excited to see how it pans out. I really love Haskell, and the push it needs is so small.


Seems to be vaporware for now. Next.


Wasn't laziness one of the things Haskell would ditch if it were to start from zero? Why is neohaskell keeping it?


Depends on what you mean by 'start from zero'. Haskell was born as a design by committee research language to serve as a platform for answering various questions in programming language research, including a lot of questions about the effectiveness of laziness. As such Haskell without laziness would not be fit for purpose.

Some people on the other hand want to say that the research part is 'done' and that Haskell should move on and become just another language suitable for use in industry and production. And some of those people think that laziness should be relaxed.


And some people think laziness is still good and a desire-able property [0].

tldr; laziness enables a lot of optimizations for high-level languages that are good for performance. Laziness/strictness aren't direct causes for performance but impact it in different ways. There are a lot of myths around thunks and memory usage. There are still fertile areas for improvement.

Haskell is suitable for industrial use and production. Most of the research being done these days is around maintaining an industrial-grade compiler pipeline while supporting new, interesting features [1]. And it has been that way for quite a long time now.

[0] https://www.youtube.com/watch?v=fSqE-HSh_NU

[1] https://www.researchgate.net/publication/334751646_Dependent...


The most fundamental proposition of Haskell was essentially the research question, "how lazy can we make a programming language?", it's the standout feature, so that'd seem kind of weird.

https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.16...


In case someone wants to know what that paper is without having to download it:

- "A history of Haskell: being lazy with class", from 2007, by Paul Hudak, John Hughes, Simon Peyton Jones, and Philip Wadler.

- https://doi.org/10.1145/1238844.1238856


You should probably also read "Wearing the hair shirt" (2003).

https://www.microsoft.com/en-us/research/publication/wearing...


I don't think so. There would probably be changes to which things are lazy by default (like enabling StrictData by default). For an in-depth explanation see this youtube playlist (currently 4 videos): https://youtube.com/playlist?list=PLyzwHTVJlRc8620PjqbM0x435...


The quip is something like "The next Haskell should be strict and the next ML should be pure".


I think the overall outlook in PL research is that the "next Haskell" should abstract away altogether from the whole strict/lazy distinction by treating both 'strictness' and 'laziness' on a first-class basis, leveraging ideas such as polarity, focusing and call-by-push-value.

This would essentially make 'data' types strict by default and 'codata' types lazy by default, but with easy syntax to add laziness or strictness after the fact. And some types (tuples, functions) would exist in both 'data' (strict by default) and 'codata' (lazy by default) flavors.


> make 'data' types strict by default and 'codata' types lazy by default

Coq has been doing exactly this for over a decade...


C++ is a giant language, it has accumulated sooo many features, so a small language can be cut out from it that offers a more concise set of features, may Zig is that language.

Perl same story. And Ruby may be that language that was cut out of Perl.

Haskell has a problem like that as well, and (while not a general purpose language) Elm is a neat, concise small language that's cut out of Haskell. As the author of this NeoHaskell commentary explains, I also do not see how NeoHaskell fits in here (epecially since it tries to be Haskell compatible).

-----

I also see the opposite, Java and Go for instance have a small feature set and miss ergonomics (and an std lib designed based on those ergonomics). Java recently got Kotlin, which seems to me a great "Java 2.0". Go may also benefit from a language that builds on top and provides great interop with the Go std lib and ecosystem.


Many of Go's core abstractions are such half-assed broken concepts (e.g. slices) that it's hard to see how one could replace them elegantly while remaining compatible.


Same could've been said for Java right?

Not saying Kotlin is perfect (it certainly shared some JVM problems like statics not being mockable, therefor needed DI everywhere in a testable codebase), but it sure did improve a the DX lot.


  An event sourcing framework
I'm out.


I think there's a lot to be said for just ignoring projects that you aren't interested in or think are taking the wrong approach. This post is a mostly fair critique of the project, but it's just going to create a lot of pointless drama. There's no 'NeoHaskell' that anyone can download at the moment, so it's not as if newbies are going to be misled into downloading an experimental implementation instead of GHC.


Author here. It is true that one of my goals in writing that post was to discourage people from jumping on the NeoHaskell train, but a larger goal was to educate people on what NeoHaskell actually was because there were a LOT of misconceptions floating around that led to confusion (and that confusion in turn amplified the drama because people were reading things into NeoHaskell that were not actually true).


> A language that triggers flow state.

That's probably not a good thing.


Someone said that discussing footguns with haskellers is useless because they are so used to walking around with bleeding flesh wounds in their feet... I think it applies here. Those on the "inside" will never see what those on the "outside" see and thus why an ambitious outsider would start a project like this.


What is wrong with PureScript? It has strict evaluation and the Syntax is 99% similar to Haskell. It transpiles to JavaScript, C++, Erlang and Go. It runs easily in older browsers without wasm, and has access to huge amount of software libs through npm interop. Yet it seems to be used by very few.


It's a strange thing that purescript is not more prevalent than it is.

It's got lots of development activity, and a huge package library, not to mention interop with JavaScript as well.

My guess is that Haskell already takes all the air out of the (albeit small) FP room.


It's quite frustrating to use a language that's so close to Haskell, but without being able to use all the libraries you're used to. And I think now that Haskell's own story for web frontend is improving, some of its appeal is fading.

Having used it in production for a while, tooling was poor, particularly IDE support, and anonymous records are in practice less of an obvious win than I expected. Plus I like laziness.


Does anyone who prefers these types of languages have any thoughts on Idris? The ecosystem is small but the language seems to satisfy the Haskell use case without the language extension issue.


The small ecosystem plus not being production ready, are the reasons Idris and Agda are not there yet, and won't be any time soon (if ever).

Also, in my experience, Haskell's user experience isn't all that bad. It seems to me that the author is worked up and dense for some reason, and is hoping that a custom base library will somehow help. All the advertised features on the website (https://neohaskell.org/) are already in Haskell's base library or an import away. The "coming soon" "Pre-thought architecture" isn't, but I'm doubtful that there exists a single architecture that fits every problem.


Idris 2 ruined it for me.

Scientifically, it's cool of course, dependent linear types yaay.

Socially though, incompatible rewrite in Scheme should've been a separate project IMO; but since it's called "Idris 2", community attention faded away from the Haskell implementation "Idris 1". Which caused bad maintenance, neglect, stagnation, of a thing I tried and liked.


Dependent types are a great idea, that still requires a lot of research to come up with a mechanism that make them tratable to the journeyman developer.


Anyone seeking to become a dictator, benevolent or not, shouldn't get the job.

FOSS has enough issues with people who were merely anointed dictators.


I'm not sure I understand why someone shouldn't be allow to be benevolent dictator of their own project, that they started.


It's clearly allowed, but I think the reaction here is negative because, unlike for example Python, this isn't someone making their own language from scratch which is then organically adopted. Instead, it's essentially someone looking at an established language and community, and saying "you'd all be better off if I was running the show here." And the person making that claim does not have the track record to make that claim believable. I don't think it's strange that people are reacting with some reservations here.

Of course it's not a hostile takeover, he'll try to build something that convinces people that he's on the right track, and I wish him the best of luck with that. There's a small chance that the project succeeds and essentially becomes the successor language to Haskell, and there's a large chance that the project fizzles out, and both of those outcomes are fine. The worst possible outcome is that it succeeds well enough to fragment the ecosystem, but not enough to really take over.


> Of course it's not a hostile takeover

From the pov of the Haskell community and the way it has been shaped by its academic origins, and by the work and organizational choices of SPJ on GHC, there is little chance the community doesn't see this as a hostile takeover.


It's because people associate the word with actual government dictatorships and they immediately fall into the freedom and democracy patriotism mode.

The reality is much more complex. If bdfl can work for open source it technically can work for the real thing as well. The keyword here is "can".


Yeah, the actual difference is huge.

If your open source dictator sucks, you can use different project, or fork it, or start your own.

If your real life dictator sucks, you can move your family for half your life savings and hope your next dictator is better, or try to protest and get killed.


Nah not that huge. It works in many places. See Singapore and if you can look past freedom and patriotism biases... you can live actually live a very good life in china under a dictator.

Democracy is also a bit of an illusion. How often has a protest changed things? why is there huge wealth inequality and power concentrated among the few? Democracy Looks like much of the bad things associated with "dictatorships" with useless freedoms like voting and protesting as an outlet.


Yeah, I don't believe democracy is the solution, just that dictatorship isn't either.


Because I've seen what happens when they become not-so-benevolent.

It's better to think of yourself as a shepherd, visionary, leader, etc. Mentally framing yourself as dictator affects your thinking. In short, BDFLs can more easily become assholes.


This person hasn't started anything and is planning on piggybacking on GHC


I think, perhaps, that declaring oneself a benevolent dictator on a project that is more or less a proposal still is just jumping the gun a bit.

Any project needs good leadership, of course, and at the start that leadership is going to be concentrated amongst a tiny number of people, maybe even just one.

It's going to be hard to encourage contribution if, right off the bat, you say "I'm BDFL. End of discussion." So the author of the project might find themselves in a position where they have actively reduced buy-in.


Declaring yourself a benevolent dictator of your own project has zero negative impact on anyone.

Frankly, it is the clearest thing about the project, how it will be run. One vision from a personality whose thought style comes through in Spades. That is refreshing.

Anyone who joins the project knows exactly who they are signing up to help.

Swing for the fences Nick Seagull!


"Anyone who joins the project knows exactly who they are signing up to help."

I'm not so sure of that. The Neohaskell site seems designed to attract the naive. If someone isn't already using Haskell, how can they know what they are getting into with Neohaskell? Someone like Gabriella can see the substance (or lack of it) behind the claims, but to a non-Haskeller, there is nothing to go by except the sales pitch. Not good.


Have seen too many instances of "too many chiefs" to instantly dismiss the idea. Perhaps voting on a time limited dictator/final arbiter?


If they're time-limited and/or recall-able, then is it accurate to say they're "dictators", though?


This is how I understand the whole heohaskell thing: some guy comes out of nowhere, spends some time picking fonts for neohaskell's website and then starts churning out github-tickets for this-is-what-a-better-haskell-is-supposed-to-look-like instead of actually doing stuff :)


I think he's tracking his ideas about this project in github tickets. IMO, that's a good first step. Whether he'll do something about those tickets or not is a question that comes later. Let's see what he'll do.


> I think he's tracking his ideas about this project in github tickets. IMO, that's a good first step.

I can agree with this. However, it's odd to start communicating the way he did this early in the project, when none of these ideas have been thought out.


That's probably as close to reality as I would guess. We'll have to see if anything gets delivered.

I don't get why Gabriela is so against this project, it might just be vaporware. But invoking the fact that this person is not already established in the community is detraction for detraction's sake (or gatekeeping).

Funny enough, I've also been very slowly chipping away at some base(/prelude) Haskell library replacement, because I find it beyond embarrassing that in 2023 with a default Haskell installation one cannot make a HTTPS GET request.

Haskell comes with half depleted batteries inside the box. And I cheer for anyone that tries to fix the base experience. If this one's vaporware, I'll just wait for the next person that gets too frustrated with the library experience.


> I've also been very slowly chipping away at some base(/prelude) Haskell library replacement, because I find it beyond embarrassing that in 2023 with a default Haskell installation one cannot make a HTTPS GET request.

Sounds interesting! Do you have anything you can link us to?


Not really. While my mention in the previous post was 2023, I actually started coding this in the summer of last year. As I work on it once in a blue moon, might be a year or two away before I publish anything.

If you're interested in terms of approach, it builds on what I consider saner exports/re-exports of all the other packages that are part of a default installation (base, containers, text, bytestring, etc), and avoids reinventing where industry standards exists (no tls/http client stack from scratch but curl C bindings). There are a few other abstractions I've written in there, but those feel rather flimsy and might remove them.


... we also need a base library that has some standard data structures like maps, vectors, stacks, and queues! Best of luck with your project. :)


How does anyone think this is real after seeing the Python bit?




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: