Structural typing fit really nicely with existing JS. Typescript have all expressiveness of JS and granular control of type safety. Given this, there is a lot of sharp edges.
`main` turns into[1]:
public static void main(String[] args) {
}
Because of this and Lombok I don't find Java particularly taxing to write. I often prefer writing Java as my IDE can provide me better information about the code.
[1] https://www.jetbrains.com/help/idea/using-live-templates.htm...
Features I care about:
* Type classes: Haskell, Scala
* Module system: OCaml, Scala
* structural subtyping / row polymorphism: OCaml
* Higher-kinded types: Haskell, Scala
Other important features, but not related to the type system:
* Powerful runtime system (multicore support, green threads, ...): Haskel, Scala (kinda, with the TypeLevel libraries, but still not 1st class)
* pure functional programming focus: Haskell, Scala (kinda, with the TypeLevel libraries, but still not 1st class)
* compiling to JavaScript (so that you can use 1 language for both backend and frontend): Scala, OCaml
... maybe PureScript would tick the most boxes ¯\_(ツ)_/¯