News for hackers. Stuff that matters.
Re:Ask HN: Best talks of 2018? by patrec on Saturday December 22, 2018 @03:32PM (#18742312)
His argument for spurious API breakage is strictly logically correct, but seems practically dubious to me. When have you ever had to unnecessarily break API compatibility because something you thought was an Option[T] result turned out to be really a T, always? Maybe I'm wrong and someone will post some convincing examples, but I currently don't see this as a problem that needs solving.

Union Types don't compose straightforwardly because they flatten; maybe this is desirable in some cases but the rationale in Hickey's talk leaves me unconvinced. The only practical use case for union types I'm aware of is smoother interfacing to dynamically typed APIs; any nice examples for something beyond that?

Re:Ask HN: Best talks of 2018? by gavinpc on Saturday December 22, 2018 @11:40PM (#18744472)
> When have you ever had to unnecessarily break API compatibility because something you thought was an Option[T] result turned out to be really a T, always?

That would be a breaking change. And should be, if you're into that sort of thing.

The objection is to the opposite case: What was a T is now an Option[T]. I don't know Scala specifically, but that's a breaking change in every typechecked language I know. Rich is arguing that it shouldn't be. But it could be possible even in typed languages through union types. For example, you can do this in TypeScript by changing T to T | undefined, which is a superset of T.

Re:Ask HN: Best talks of 2018? by patrec on Sunday December 23, 2018 @11:51AM (#18747045)
Nope, it's not the opposite case, I was just to lazy to spell it out. Which way around it is depends on whether it's a return value or parameter. Covariant vs contravariant. If it's a parameter an API change from T to Option[T] shouldn't break (you require less), whereas with a return type it's from Option[T] to T (you promise more).
Re:Ask HN: Best talks of 2018? by gr__or on Sunday December 23, 2018 @03:28PM (#18748132)
To be fair the "result"-part in "something you thought was an Option[T] result turned out to be really a T" makes it sound like you were speaking of the return-type to me as well. I appreciate the elboration though!
Re:Ask HN: Best talks of 2018? by gavinpc on Tuesday December 25, 2018 @01:29AM (#18756265)
Yes, that was my fault, I overlooked "result," and I also appreciate the clarification.

I think the point remains that, while this is not a breaking change from a contractual viewpoint, most type systems would deem it incompatible.

Re:Ask HN: Best talks of 2018? by IshKebab on Saturday December 22, 2018 @04:40PM (#18742598)
I think you're kind of both agreeing. It would be nice if Maybe did work like he suggested, but in practice it's not that big a deal.