← Back to context

Comment by gmfawcett

11 days ago

> in the sense that their return type doesn't fully describe what the code does

Sure they do, at least in Haskell. Bottom inhabits all types.

There's a difference between "doesn't return because it has an infinite loop" and "doesn't return because it threw an exception"

Haskell can't express the difference, but languages with effects, like Koka and F*, can!

The first effect is called div in Koka and the second is called exn, section 2.2 here

https://www.microsoft.com/en-us/research/wp-content/uploads/...

  • It's fine if the poster above me wishes to change languages. Anyone who chooses to stick with Haskell should get comfortable with the notion that functions can diverge, and accept that this is fully consistent with the Haskell type system. The return types may seem unhelpful, but they are accurate.