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

Qqwy
Original source of discussion: This topic on the Pragmatic Programmers’ Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
hariharasudhan94
lets say i have a sample like a = 20; b = 10; if (a > b) do {:ok, "a"} end if (a < b) do {:ok, b} end if (a == b) do {:ok, "equa...
New
ovidiubadita
Hey all, I discovered Elixir and I love it. I always wanted to learn a functional programming and I intended to go for Haskell, but afte...
New
beno
I will often find my self writing things similar to: case some_value do nil -> something() "" -> something() _ -> somethi...
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
earth10
Hi, I’m just starting to build a side-project with Elixir and Phoenix and doing some basic test with Elixir alone. What strikes me is th...
New
Tee
can someone please explain to me how Enum.reduce works with maps
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
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

Other popular topics Top

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
hariharasudhan94
lets say i have a sample like a = 20; b = 10; if (a > b) do {:ok, "a"} end if (a < b) do {:ok, b} end if (a == b) do {:ok, "equa...
New
danschultzer
None of the current solutions worked well for me, so I went ahead and built a user management system from scratch. This project took far...
548 29603 241
New
AstonJ
We’ve put together this wiki for Phoenix LiveView - please feel free to add any info you feel is worth including. What is Phoenix LiveV...
New
axelson
This post is a wiki (feel free to hit the edit button near the bottom right of this post to add your own changes!) This post collects co...
239 48342 226
New
Nvim
Anybody knows a comprehensive comparison of Django and Phoenix, thanks for the help. Where are they similar? Where do they differ the m...
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
shijith.k
I am trying to start a new phoenix project with elixir 1.9, but mix phx.new does not work. It says that ** (Mix) The task "phx.new" could...
New
aesmail
Hello guys, I have finally made it. I created an admin interface for a framework. It’s been on my todo list for years and with the curre...
New
malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New

Latest on Elixir Forum

Elixir Forum

We're in Beta

About us Mission Statement