eksperimental
Do you ever wish Elixir had more types?
Share some of the ones that you frequently use.
If the outcome is good I will compile them into a library.
Here are some:
@typedoc """
A non-positive integer.
That is, any integer `<= 0`.
"""
@type non_pos_integer :: 0 | neg_integer()
@typedoc """
A keyword list with `key` specified.
For example: `keyword(version :: atom(), map())`
"""
@type keyword(key, value) :: list({key, value})
@typedoc """
A non-empty keyword list.
"""
@type nonempty_keyword(value) :: nonempty_list({atom(), value})
@typedoc """
A non-empty keyword list with `key` specified.
For example: `nonempty_keyword(version :: atom(), map())`
"""
@type nonempty_keyword(key, value) :: nonempty_list({key, value})
Trending in Discussions
As the title says, please share what you’ve been up to with Elixir. Whether that’s been learning it, looking into it, making stuff with i...
New
Hey there,
It’s been more than a year since we started using LiveView as our main UI library and building a whole library of UI componen...
New
I am happy to introduce the very α version of the new programming language compiled to BEAM.
Welcome Cure.
It has literally three kille...
New
Quite interesting article Google brought me. Didn’t find any mentions about it here.
What do you think in general? Would you use togethe...
New
Hi everyone!
The first release candidate for the Expert language server project is now available!
We’ve published a press release detai...
New
Since we have deprecated our Erlang sections (as we have dedicated Erlang Forums now) let’s add this thread for those who’d like to post ...
New
What IDE or editor are you using for Elixir development?
Personally, I use Zed, and I really like it, but sometimes I wish there were a ...
New
Other Trending Topics
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
Hi there! We created Gust: A task orchestrator inspired by Airflow.
For those who have never heard about Aiflow, it’s a Python-based wor...
New
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself.
My main conc...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixirconf-us
- #ai
- #blog-post
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #hex
- #security











Showing Posts 1 to 10- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
dimitarvp
We can probably get syntactic sugar for string-keyed and atom-keyed maps? Technically these:
…should be enough, but I do wonder whether having builtin syntax won’t help further adoption. Something like e.g.
string_map()andatom_map().Maybe some imitation of sum types as well? So instead of this:
…we can have this:
That would be just some syntactic sugar.
But I don’t think the community will agree on alternative syntaxes for things you already can express. I am mostly thinking out loud here.
eksperimental
Hi @dimitrarvp, thanks for chiming in. Note that the intention of the post is not to make a proposal to the language. Just dream and list types that you find useful in your day-to-day development.
dimitarvp
In that case I’ll stand by by my suggestion of having convenient and accepted aliases for string-keyed and atom-keyed maps. While you can easily express them as shown above, IMO it will pay off to have something more intuitively named.
eksperimental
Yes, I was also writing some aliases for the empty types.
There is a divergence between pattern matching and type specs, for example, the type
%{}.. is that a synonym formap()or for an empty map?some for
<<>>, so i createdityonemo
This is my wishlist:
String literals:
@type my_string::"foo"List literals:
@type my_list::[:foo, :bar]Min-length tuples
@type my_tuple_at_least_two :: {any, any, ...}eksperimental
eksperimental
Well, I have put up this little library,
https://github.com/eksperimental/extended_types
The usage is quite simple.
If you run
mix docsyou can see all the supported types under theExtededTypes.Typesmodule.Please let me know if you think it could be improved in any way.
Thank you.
al2o3cr
Where would a type like this be useful?
dorgan
Liveview
handle_eventcallback is the first to come to mindityonemo
Anything json related too