Live data from Hacker News

How to choose between Hindley-Milner and bidirectional typing

thunderseethe.dev

1–10 of 50 posts

Re: How to choose between Hindley-Milner and bidirectional typing

#3
> friends don’t just bring up type inference in casual conversation

I wonder if this is a reference to "I need you to understand that people don't have conversations where they randomly recommend operating systems to one another"

But to the actual point of the article: my understanding is that there are areas where you can use bidirectional typing (e.g. languages that have subclasses) where HM style type inference might become undecidable.

Re: How to choose between Hindley-Milner and bidirectional typing

#4

> friends don’t just bring up type inference in casual conversation I wonder if this is a reference to "I need you to understand that people don't have conversations where they randomly recommend operating systems to one another" But to the actual point of the article: my understanding is that there are areas where you can use bidirectional typing (e.g. languages that have subclasses) where HM style type inference mi…

I once studied proof theory for a summer at a school in Paris and we talked about type inference and theorem proving all the time in casual conversation, over beers, in the park. It was glorious.

Being a student is so much fun, and we often waste it, or at least don't value it as much as we ought. 20 years later I'd love to go back.

Re: How to choose between Hindley-Milner and bidirectional typing

#5
> What folks should actually be asking is “Does my language need generics?”.

You should also ask “Does my language need subtyping such as subclasses?” And if the answer to both is yes, you should probably forget about Hindley Milner, or at least pick something far away from it on the spectrum.

Re: How to choose between Hindley-Milner and bidirectional typing

#6

> friends don’t just bring up type inference in casual conversation I wonder if this is a reference to "I need you to understand that people don't have conversations where they randomly recommend operating systems to one another" But to the actual point of the article: my understanding is that there are areas where you can use bidirectional typing (e.g. languages that have subclasses) where HM style type inference mi…

> I wonder if this is a reference to "I need you to understand that people don't have conversations where they randomly recommend operating systems to one another"

It is!

> my understanding is that there are areas where you can use bidirectional typing (e.g. languages that have subclasses) where HM style type inference might become undecidable

There are! Afaik most languages end up with a bidirectional system in practice for this reason. Haskell started out HM and has shifted to bidir because it interacts better with impredicative types (and visible type applications). Bidir can handle fancy features like subtyping and all sorts of nifty stuff.

Re: How to choose between Hindley-Milner and bidirectional typing

#7
post #5

> What folks should actually be asking is “Does my language need generics?”. You should also ask “Does my language need subtyping such as subclasses?” And if the answer to both is yes, you should probably forget about Hindley Milner, or at least pick something far away from it on the spectrum.

Eh, generics kinda do introduce a subtyping relation already. It's just that HM's Gen rule of e: σ implies e: ∀α.σ is restrictive enough that this subtyping relation can be checked (and inferred) by using just unification which is quite an amazing result.

Re: How to choose between Hindley-Milner and bidirectional typing

#8

> friends don’t just bring up type inference in casual conversation I wonder if this is a reference to "I need you to understand that people don't have conversations where they randomly recommend operating systems to one another" But to the actual point of the article: my understanding is that there are areas where you can use bidirectional typing (e.g. languages that have subclasses) where HM style type inference mi…

I once studied proof theory for a summer at a school in Paris and we talked about type inference and theorem proving all the time in casual conversation, over beers, in the park. It was glorious. Being a student is so much fun, and we often waste it, or at least don't value it as much as we ought. 20 years later I'd love to go back.

> Being a student is so much fun, and we often waste it, or at least don't value it as much as we ought. 20 years later I'd love to go back.

An aside, but some years ago I watched the demo 1995 by Kewlers and mfx[1][2] for the first time and had a visceral reaction precisely due to that, thinking back to my teen years tinkering on my dad's computer, trying to figure out 3D rendering and other effects inspired by demos like Second Reality[3] or Dope[4].

I seldom become emotional but that 1995 demo really brought me back. It was a struggle, but the hours of carefree work brought the joy of figuring things out and getting it to work.

These days it's seldom I can immerse myself for hours upon hours in some pet project. So I just look things up on the internet. It just doesn't feel the same...

[1]: https://www.youtube.com/watch?v=weGYilwd1YI

[2]: https://www.pouet.net/prod.php?which=25783

[3]: https://www.pouet.net/prod.php?which=63

[4]: https://www.pouet.net/prod.php?which=37

Re: How to choose between Hindley-Milner and bidirectional typing

#9
post #5

> What folks should actually be asking is “Does my language need generics?”. You should also ask “Does my language need subtyping such as subclasses?” And if the answer to both is yes, you should probably forget about Hindley Milner, or at least pick something far away from it on the spectrum.

HM handles sub-typing just fine? Numerous approaches have been known since the 1980s - Michael Wand’s row polymorphism is one such approach.

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

Post reply on HN