Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Which features would those be?


* Immutable-first

* Immutable/persistent collections in standard library

* Machinery to "modify" immutable deeply nested case classes/sealed traits. You have the copy method, you have lens libraries. Very easy and comfortable to use.

* Expression oriented. if/try/etc expression can be bound to a variable

* less characters to write the same idea/program, while not losing readability

* better tooling: Scalafmt is ubiquitously used, supported in IntelliJ and is very good. Scalafix (a linter which can also fix some issues automatically) is used a little bit less, but is also good.

* build tools: while I don't like sbt, Mill is a so much better build tool than Maven or, even worse, Gradle. Then there is also scala-cli, which is not a build tool, but can work like it, if you have a simple, single-module project (i.e. no sub-projects/sub-modules).


Also, the collections API is the best out of any language I have used!


Thank you, this captures most of these. I’d also add the excellent libraries from Twitter like Algebird and ability to do a lot of data processing with types at scale using Spark.


You can code the whole program with only types and no code?

Albeit that is possible in typescript these days too tho.


Type systems expressive enough to write actual programs is widespread these days.

Typescript's typesystem is even Turing complete.

Regardless, it is not very practical to use a type checker as your runtime.


Didn’t someone implement Doom in the Typescript type system?


For me, the killer features were the metaprogramming abilities (both type and macro based). Not so much because I used them directly but because they allowed library authors to create extremely expressive libraries.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: