przemyxe0p
Hello
I am trying to understand types definitions in documentation https://hexdocs.pm/elixir/typespecs.html#built-in-types
Especially iolist() which is defined as
maybe_improper_list(byte() | binary() | iolist(), binary() | [])
I am not sure how to read pipe (|) and coma (,) in type definitions.
ChatGPT returned following:
First Part: byte() | binary() | iolist()
This means each element in the list can be:
byte(): An integer from0..255(a single byte).binary(): A binary string (<<...>>).iolist(): Anotheriolist()(allowing nested lists).
Second Part: binary() | []
This means the tail of the list can be either:
binary(): The list may end with a binary (improper list).[]: The list may end properly (normal list).
Which I’m not sure is true.
Please clarify
Trending in Questions
Hey guys,
I’ve got a huge CSV ( around 10 GB ) that needs to be processed hourly
Do you guys have any suggestions what is the best prac...
New
Hello!
Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app.
I creat...
New
I have what I’ve heard referred to as a “lookup table” in my database. This is a way of assigning codes to common values. One common lo...
New
What approach to take when sending live updates to “random” users Hi! I have a question, I have a little chat app, and when I create a DM...
New
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
Anyone here using Honeybadger?
My Honeybadger account is being overwhelmed with noise from some bots. Seeing a lot of
Bandit.HTTPError...
New
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New
Other Trending Topics
I am happy to introduce the very α version of the new programming language compiled to BEAM.
Welcome Cure.
It has literally three kille...
New
Hobbes is a low-level distributed database for the Elixir programming language.
Hobbes provides a simple, safe, and scalable storage lay...
New
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve.
They are GUI (Emerge) and State management (S...
New
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
There are three potential reasons for members of this forum to have a look at https://vutuv.de
You are tired or annoyed of LinkedIn.
Yo...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #blog-post
- #elixir-ls
- #ai
- #elixirconf-us
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #hex
- #security
- #metaprogramming










Showing Posts 1 to 7- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
fuelen
This is true.
Improper list is a list where the tail is not an empty list.
|pipe meansor. Think aboutmaybe_improper_listas about function that returns a type, so it has 2 args and that’s why,comma is used.przemyxe0p
So
binary() | []means that tail of the list can bebinary()or[]But if have such list I can pattern match it
so In tail I can have
binary()or[]but in the same time t is like “rest of the list without first element”
and there could be elements like
byte()binary()oriolist()is it becausebyte()binary()andiolist()are alsobinary()?garazdawi
The second part describes the tail end of the entire list, not the tail of any list item. For example:
In the above, the “First Part” in the type describes
1, 2, 3and the “Second Part” describes only[]. So in your example[h | t ], the type oftis the union of the “first part” and “second part” unless we know that it is the end of the list, then it is only the “second part”.przemyxe0p
So in
maybe_improper_list(byte() | binary() | iolist(), binary() | []), the second argument describes the tail, right? But in this context, the tail is just the last element of the list?I took a deep dive into bitstrings, binaries, strings, and the rest, but now even though I know a lot, I’m still very confused. I watched a video, did Exercism, read documentation, but as you can see, I’m still asking questions.
Nevertheless, this is clarifying a lot:
Based on that:
iolist()must have[]orbinary()as last element in it right? (String is UTF-8 encoded binary so it can be string to right?)binary()so it can be alsobyte()? isbyte()just abinary()with 1 byte?binary()?garazdawi
binary().byte()is an integer between 0 and 255 inclusive, not a binary with a single byte.byte()type is mostly used within lists, not within binaries.przemyxe0p
Thanks, but when defining binary
<<0,1,255>>aren’t we usingbyte()? since it is 8 bit integer?gregvaughn
The binary “constructor” syntax,
<<...>>accepts bytes, but it doesn’t produce abyte(). Try for yourself, see if<<0>>equals0.