Elixir is not really about the syntax, we have great tooling, our own standard library (with proper Unicode support, collections, unified API for dictionaries, etc) and our own approach to some constructs in OTP.
Feel free to ping here if you have any questions. I will make sure to check this thread again later.
I've been recommending Elixir as the language of choice to all my colleagues. I truly believe it will bring the advantages of OTP architecture to a wider audience of programmers.
`reduce(collection, [], R.map(fun)) |> :lists.reverse`
is there any chance Elixir's enum core can take a page from Clojure's transducer idea and, instead of implementing map with reduce and [], implement it with transduce and some function that steps?
I've often had the need to map and filter over strings to achieve rails-like features such as #to_url, #classify, #underscore, and #humanize... but being forced to either rewrite Enum functions for strings or constantly peppering in String.split("") and Enum.join("") feels really bad.
iex> Stream.unfold("hello", &String.next_codepoint/1) |> Enum.to_list
["h", "e", "l", "l", "o"]
The reasons we don't have first class support for this though are:1. There are multiple ways you could traverse a string. By bytes, by codepoints or by graphemes. I don't think we should pick any of those as default. Ruby did that and to this day it is source of confusion (aggravated by the behavior change from 1.8 to 1.9)
2. Modifying strings like this would be horribly inefficient. Using split/join wouldn't be recommended also as you are generating a bunch of intermediate garbage to go from string -> string. The recommended way is to rely on pattern matching and Elixir's bit syntax as the compiler will be able to optimize most cases well.
Don't lie, Jose; we all know it's about the syntax ;)
Kudos for the awesome language you've created.