I feel like adding a new macro this similar to *with *would just bloat the 
Elixir spec. That being said, adding shorthand for tagged matches would be 
nice as long as it doesn't pollute the spec. 
Personally, I don't like the idea of adding new syntax to describe this.

That being said, if in Elixir 2.0's *with *used newlines instead of commas 
to delineate sections, unwrapped keyword list syntax would be usable. 

with all: {:ok, users} <- all: cashed_users()
     best: {:ok, user} <- best: get_best_user(users)
do   state
else all: {:error, msg} -> dostuff
     best: {:error, msg} -> dostuff


This is existing syntax and is instantly recognizable by someone familiar 
with Elixir.

Personally, I think this is the best option. But as far as I am aware there 
is no way to avoid the commas without moving everything after the *do*. 

On Sunday, July 23, 2017 at 1:06:04 PM UTC-7, niahoo osef wrote:
>
> Hi, 
>
> I would like yo know your opinion about cunstructs like this one. I guess 
> this is not a priority for Elixir, and I know I can add it to Hex.pm. I'm 
> just unhappy with the `with` block and I want to know what you think.
>
> I made a simple implementation here : https://github.com/niahoo/ctrl with 
> detailed information of the annotation feature.
>
> Basically it's a `with` block but with standard block syntax and match 
> selection with tags :
>
>
> ctrl do
>   {:ok, state} <- init()                              # Classic `with` 
> clause
>   %{id: id, opts: opts} = state                       # Any expression
>   :ok <- register(id)
>   :f_repo | {:ok, repo} <- Keyword.fetch(opts, :repo) # Tagged match
>   :f_user | {:ok, user} <- Keyword.fetch(opts, :user) # Different tagged 
> match
>   {:ok, do_something(id, repo, user)}
> else
>   {:error, _} = err -> err                            # Errors with info
>   :f_repo | :error -> {:error, :no_repo_option}       # Errors on :repo 
> only
>   :f_user | :error -> {:error, :user_not_set}         # Errors on :user 
> only
> end
>
>
>
> Thanks for reading :)
>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/3c8eca18-fc6c-4317-a81b-5b83f4978279%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to