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

If you are interested in learning a purely functional language, I'd recommend against picking a dynamically typed language like Elixir.

Functional programming only starts to show its power with types and parametric polymorphism (higher kinds, etc...). Without type annotations, all you get is a watered down, crippled version of what a functional language can achieve.



Well first, Elixir isn't purely functional. It's got side effects all over the place, it just doesn't have mutable variables.

Second... While I love static typing as much as the next guy, there's definitely value in immutable data in a dynamic language. You also get Dialyzer in Elixir/Erlang, which is an interesting alternative to the usual type systems you find in Haskell/Rust/etc. in that it focusses on finding places where there's provably a problem, rather than where it's not provably correct.


> there's definitely value in immutable data in a dynamic language.

Sure, but there's even more value in immutable data in a statically typed language, because of all the advantages that come with such a language (automated refactoring, better performances, tooling, etc...).


I've been working with the BEAM (via Erlang) for over a decade, and with Elixir for almost 1.5 years, and I'd still give up, well, probably my current job if I could get a fully Hindley-Milner Typed Elixir...


I guess your job is mine now :)

https://github.com/alpaca-lang/alpaca


I've always assumed that a statically typed Elixir would look a lot differently, especially, vis a vis, macros. Is that a fair assumption?


Yes, mis-typed when I typed purely functional. My intent was to lean closer towards mostly-functional languages than languages which _can_ be written in a functional style (a la JS or Ruby).

I should know better than to use the word "pure" on the internet, someone will always correct how inaccurate my usage is :)




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

Search: