News for hackers. Stuff that matters.
Re:I’m porting the TypeScript type checker tsc to Go by endgame on Tuesday January 25, 2022 @04:16PM (#30078154)
> you can only have one `Eq` or `Ord` instance for some type A.

This is a good thing - it stops you from using one Ord instance when putting As into a Map or Set, and then trying to pull them back out using another. Newtypes let you provide "additional" instances in a safe way.

Re:I’m porting the TypeScript type checker tsc to Go by epolanski on Tuesday January 25, 2022 @07:29PM (#30080123)
Why shouldn't I be able to use as many Ord instances as I want?

I'll give you a trivial example I have some data type representing a TvShow, why should there be just one way to sort a collection of TvShow? Maybe I want to sort by year, maybe by length, maybe by category.

It's trivial to do in fp-ts, you can have as many Ord instances as you wish.

Re:I’m porting the TypeScript type checker tsc to Go by Nullabillity on Tuesday January 25, 2022 @08:26PM (#30080495)
Ord is for the natural (obvious and hopefully uncontroversial) ordering of a given type.

If your type doesn't have a natural ordering (as your TvShow doesn't) then you would use sortBy to supply an arbitrary compare function (just like what you would define in your Ord instance).

Re:I’m porting the TypeScript type checker tsc to Go by epolanski on Wednesday January 26, 2022 @04:26PM (#30092142)
You seem to be a bit confused because indeed there's no such thing as "natural, uncontroversial, obvious ordering".

Ordering (and more specifically a total ordering) in mathematics is a set and a binary relation that has the transitive, irreflexive and connected properties.

Not even natural numbers have "uncontroversial natural ordering", as I guess even you can think of at least two different binary relations (<= and >=) that form two different orderings for N.

There's a lot of orderings more, here's one that sorts first odd and even numbers: "0 < 2 < 4 < 6 < ... < 1 < 3 < 5 < 7 < ...". And there's others like this.

https://en.wikipedia.org/wiki/Gray_code

Natural numbers in fact have (or better: form) an aleph one types of orderings. None is "special, uncontroversial or natural" just because we're used to think about the default <=.

The concept of ordering requires two things: the data type and the binary relation. It's a pair of things we can represent as (X, compare) but which compare you choose isn't implicit, natural or magical.

When talking about Haskell, it has the concept of type classes, where types and their behavior are bundled together. That's a design choice of Haskell which has pros and cons, but there's no mathematical foundation for a data type to have one preferred ordering.

Ocaml, Scala and most pure fp libraries I know do not have the limitations of Haskell when it comes to the concepts of ordering and equality, in fact in most of those when asking for an ordering ask you for a data type and a compare function. Exactly what the mathematical definition requires you to.

Not a typeclass where those are bundled together for some design decision.

Hope I clarified you that there's no such thing as "uncontroversial natural obvious" ordering, because there's no such things in mathematics.

Re:I’m porting the TypeScript type checker tsc to Go by afiori on Wednesday January 26, 2022 @02:13AM (#30082704)
the argument is that usually you do not want that, it is a Haskell typeclasses vs ocaml modules discussion
Re:I’m porting the TypeScript type checker tsc to Go by hiptobecubic on Tuesday January 25, 2022 @08:09PM (#30080370)
They just said why it's important to explicitly track which instance is in effect and newtypes do that.