ijverig

ijverig

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.

Showing Posts 1 to 3

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.

dom

dom

The module doc for Tuple has a pretty lengthy explanation.

In short, it’s because having to use functions like Tuple.append/2 is a warning sign that you’re not using tuples as the fixed-size containers they’re meant to be, and so you’re likely to create performance problems, or at least non-idiomatic code.

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).

— All posts loaded —

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
achenet
Hello, I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind. However, when I launch mix phx.server, I get an error...
New
bradley
I really like the adapter patterns that ecto, nebulex, waffle, etc. use and would love find something similar for a key management servic...
New
unaware8150
Hello folks! So at work, we are seeing some situations where we have to define some “fixed” strings that are used across the codebase in...
New
Cxx-mlr
I’m working on a small exercise involving update_in/3, and I came up with this solution: data = %{ name: "Periodic Table", category:...
New
Alvinkariuki
How Can I Optimise Compile Time Dependencies I have been building an elixir application for about 2 years now. Many modules and files ha...
New
dillonoconnor
Is there any way to avoid the Hologram compiler running when using iex? It seems like the front-end code could potentially be disregarded...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews