Edward Kmett - Type Classes vs. the World
Why Hacker News recommends it
HN points to it as the definitive explanation of why coherence and the orphan rule matter, in debates over Haskell, Rust traits, OCaml modules and Elm.
What it is
Edward Kmett speaks at the Boston Haskell meetup about type classes and the design tradeoffs of global coherence compared with other approaches to implicit instances. It covers why uniqueness of instances matters for reasoning and refactoring.
Recommended by 2 HN commenters across 2 different months, 2015 to 2024.
What Hacker News said
Strong rec shadytrees · 2015-09 · on “Haskell's Type Classes: We Can Do Better”
The point is a little more subtle than this, or how the article made it out to be. Global coherence and confluence (which GHC attempts to enforce unless told otherwise) is great for refactoring and equational reasoning and (yes) mathematics and programming at large, as Ed Kmett's fantastic "Typeclasses v. the World" talk covers: [this video] Global uniqueness of instances (which GHC does NOT enforce) is bad for modular programming, or programming at large, which is a point some of the commenters here are making. [LINK] The submitted HN link here has a terrible title. What the author is proposing is enforcing typeclass laws, which is a great idea (but difficult in practice to implement). Practice
Recommends Twey · 2023-08 · on “This isn’t the way to speed up Rust compile times”
Edward Kmett has a great explanation[1] of the considerations around this space. It's not that alternatives to the orphan rule are hard to implement, it's that they lead to things being much harder to reason about for the programmer. [1]: [this video]
Cites ablesearcher · 2015-11 · on “Making Elm faster and friendlier in 0.16”
I've seen Evan's talk. Evan confuses the presentation of features with the value of those features. (I suppose one could solve the difficulties people have in learning Mathematics by throwing out everything after Algebra I; another solution, however, might be to do a better job teaching the more difficult stuff.) Just because you shouldn't expose new programmers to advanced concepts on the first day doesn't mean they shouldn't be a part of the language. Similarly, the fact (<~) might confuse someone new to Elm isn't a reason for removing it from the language. I'm sympathetic to the concern that some code is too "clever" or dense; but Elm swings the pendulum too far. (Btw, type-classes are no
Cites lomnakkus · 2016-04 · on “An OCaml manifesto – Problems and what's needed for widespread adoption”
AFAIUI modular implicits don't give you global uniqueness. While this can be "worked around" in some cases[0], it's not really possible in the general case, and global uniqueness is pretty essential for sanity when writing higher-level code[1]. [0] The paper gives set-union as an example. [1] [this video] . (Sorry for throwing video at you -- there's probably a write-up somewhere, but I'm in a bit of a rush, and this was the thing that came to mind.)
Cites airless_bar · 2016-04 · on “An OCaml manifesto – Problems and what's needed for widespread adoption”
> [1] [this video] Now we just need a Haskell compiler which actually bothers to provide the "pretty essential for sanity" for global uniqueness. Currently, I count zero compilers in common use which do.
Cites themk · 2024-11 · on “Traits are a local maximum”
It's been a while now, but I believe Ed Kmett covers some of this in his talk "Typeclasses vs The World" [this video]