Ah, what happened to the site design? It used to have a lovely background and monospace text.
5,540 karma · joined April 7, 2010
Ah, what happened to the site design? It used to have a lovely background and monospace text.
As a user, I think effect libraries in Haskell trade off between five main constraints:
* Typelevel wizardry
* Boilerplate
* Performance
* Ability to handle "higher-order" effects (e.g., `bracket`)
* Safety (e.g., not accidentally leaking effects beyond their scope)
The most compelling libraries I've seen from the industrial perspective are the "IO-wrapper" libraries like `cleff`, `effectful`, and `bluefin`. These libraries tend to give good performance, can handle higher-order effects, but trade off a little safety to get the typelevel stuff down a bit. Of these, I currently favour `effectful` but am keeping an eye on `bluefin` (which is very close to `effectful` but with explicit handle-passing). The explicit handle-passing in `bluefin` seems to get the typelevel down a bit more in exchange for asking the user to write a little more boilerplate to explicitly pass handles around.
https://people.csail.mit.edu/gregs/ll1-discuss-archive-html/...
Forbes, 2019: https://www.forbes.com/sites/yuwahedrickwong/2019/04/19/econ...
NPR, 2009: https://www.npr.org/2009/10/26/114163098/a-spoonful-of-socia...
LSE Economics Society essay question, 2018: https://www.tutor2u.net/economics/blog/lse-economics-society...
I also clicked through ten pages of Google search results for "capitalism is the worst economic system, except for all the others", each of which showed the literal quotes in the preview excerpts, at which point I became too bored to continue.
This really helps systems from muddling along into bizarre states, where things are going awry and nobody knows why.
Australian users of alternative app stores should make a complaint to the ACCC: https://www.accc.gov.au/about-us/contact-us-or-report-an-iss...
In the past, they forced Steam to implement proper refund policies, and they are currently suing Microsoft about the way subscribers were duped into paying more for "AI features" they didn't want.
In the past, they forced Steam to implement proper refund policies, and they are currently suing Microsoft about the way subscribers were duped into paying more for "AI features" they didn't want.
Don't ask what people living in the high altitudes will do - I'm still working on that.
This all assumes that you're willing to buy into a language that does immutable data structures by default, and are willing to rely on the work of people like Okasaki who had to work out how to do performant purely functional data structures. If you're willing to admit more mutability (I'm not), then you sit at different points in the design space.
Having laziness by default means that functions compose properly by default; you don't have to worry about libraries providing an interface to your chosen incremental streaming library or whatever. I've seen friends working in strict dialects of Haskell forced to write out each combination of list functions by hand because otherwise they'd have to materialise large intermediate data structures where regular lazy Haskell simply wouldn't.
Ed Kmett has a couple of great posts about the value he's realised from laziness:
https://www.reddit.com/r/haskell/comments/l98v73/can_you_sha...
https://www.reddit.com/r/haskell/comments/5xge0v/today_i_use...
In reality, the technical implementation will undoubtedly be a privacy and surveillance disaster.
In a vacuum, people thought "social media" meant "Instagram and TicToc and Facebook etc."
In reality, the eSafety commissioner thinks "social media" includes platforms like GitHub. Yes, really.
https://www.abc.net.au/news/2025-09-24/digital-dilemna-socia...
1. The contract to build the thing will go to the lowest bidder, who is all but guaranteed not to do any of it correctly (cf. the UK Post Office scandal and Fujitsu's role in it).
2. The public has no guarantee that it is implemented in the cryptographically secure way, or that is is ONLY implemented in the cryptographically secure way (e.g., either by accident or through malice the system leaks info it shouldn't).
3. The overwhelming majority of the public are not trained in nearly enough computer science to understand "no actually this system isn't a total privacy nightmare" (assuming that it's actually implemented securely).
On top of that, the grammar is quite difficult to parse. You need a parser that can keep several candidate parses running in parallel (like the classic `Parser a = Parser (String -> [(a, String)])` type) to disambiguate some of the gnarlier constructs (maybe around file paths, URLs, and record accesses? I forget). The problem with this is that it makes the parse errors downright inscrutable, because it's hard to know when the parse you actually intended was rejected by the parser when the only error you get was "Unexpected ','".
Oh, and you can't multiply integers together, only naturals.
Maybe Nix in pure eval mode, absurd as that sounds?
I think the best thing for tools to do is to take and return JSON (possible exception: tools whose format is simple enough for old-school UNIX-style stdin/stdout file formats). Someone will come up with a good functional abstraction over JSON eventually, and until then you can make do with Dhall, YAML, or whatever else.