ijverig

ijverig

Organization and implementation of Elixir

My question is regarding the implementation of the language:

In Erlang we have element to access tuple elements, setelement to change elements, append_element to append elements to tuples, and so on…

In Elixir we have elem, put_elem and Tuple.append, respectively.

Why some functions like elem and put_elem are part of Kernel in Elixir, while others that seem to be at the same “level” are in proper modules (like Tuple.append)?

For me it’s like saying elem and put_elem are core to the language, and that comes before being into Tuple.

Most Liked

NobbZ

NobbZ

elem/2 is guard safe, I think thats the main reason why it is in Kernel.

put_elem is probably in Kernel to line up with put_in/2/3, but I’d like to not see it there as it involves the cost of copying the full tuple.

Tuple.append/2 is probably in its very own module, because it involves the cost of copying should be carefully thought upon before just using it.

These are assumptions based on observations mixed with a bit of personal opinion.

peerreynders

peerreynders

In my view using functions on tuples feels wrong (but there are always exceptions). They seem like intrinsic “values/units” that are constructed with the tuple notation and smashed with destructuring (via pattern-matching).

Strangely with maps I’m quite the opposite - they seem more complex and free form than tuples so I tend towards using functions rather than (yet another) map notation (I guess Clojure made me operator averse/function friendly). I keep having to remind myself:

  • that I can pattern match on maps
  • and that with map pattern matching ignoring parts is implicit

List are in the middle. I have to be backed into a corner before I use hd/1 or tl/1 preferring the cons notation - probably because that is the bread and butter for pattern matching (for destructuring) - otherwise they are dominated by higher order functions (… and Enum.at/3 makes me cringe).

Where Next?

Popular in Questions Top

shahryarjb
Hello, I get Persian date from my client and convert it to normal calendar like this: def jalali_string_to_miladi_english_number(persi...
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New
sergio_101
I am VERY much an elixir newbie. I have taken one elixir course and one phoenix course on Udemy. During that course, I saw the instructor...
New
LegitStack
I’m trying to make a websocket server in Phoenix or raw Elixir. I heard about gun, I think I could use cowboy, but since I’m not that sma...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID<0.412.0> terminating ** (Postgrex.Error) FATAL...
New
sabri
Can someone explain the settings of pool_size of Ecto in config file? and what is the recommend size? Thanks
New
Mooodi
Given a string, how can I get access to its character by index? Enum.at("my_string", 2) doesn't work. Or rather, not char, but a substr...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New
jay1
Why is it that the mnesia database isn’t the most preferred database for use in Elixir/Phoenix?
New

Other popular topics Top

sergio
In Ruby, I can go: User.find_by(email: "foobar@email.com").update(email: "hello@email.com") How can I do something similar in Elixir? ...
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
itssasanka
Hi all, Trying to get some more clarity over utc_datetime and naive_datetime for Ecto: https://hexdocs.pm/ecto/Ecto.Schema.html#module-...
New
sergio
I couldn’t find any guides that worked well with Phoenix 1.6.0 and esbuild. I hope this helps people test the waters and eases you into t...
New
lk-geimfari
What is most correct way to open, read and parse JSON file with poison? For example if we have example.json file in root of some projec...
New
fireproofsocks
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? https://hexdocs.pm/ecto/Ecto.Repo.h...
New
electic
Hi, I am new to Elixir. I am trying to use the DateTime component to insert a date into MySQL however the there seems to be no way to fo...
New
josevalim
Hi everyone, One of the features added to Elixir early on to help integration with Erlang code was the idea of overridable function defi...
New
TunkShif
This post is an instruction guide to help you setup your Neovim for Elixir development from scratch. It includes general information on h...
273 38985 115
New
magnetic
Hey :wave:t3: Elixir community, I’ve been learning Elixir, and working on some side projects. My editor of choice is VSCode, and althoug...
New

We're in Beta

About us Mission Statement