> This is a separate convo but I don’t see value in adding a primary syntax for sets given we can’t really use it in pattern matching. A syntax for only adding and removing set elements is, IMO, not worth it.
I whole-heartedly agree. The indirection of our set implementation and lack of literals served us well during our transition off of HashSet <https://hexdocs.pm/elixir/HashSet.html>, towards MapSet <https://hexdocs.pm/elixir/MapSet.html>, and the motivating Collectable <https://hexdocs.pm/elixir/Collectable.html> protocol creation to support Enum.into/2 <https://hexdocs.pm/elixir/Enum.html#into/2> and enable for/1 :into macro support <https://hexdocs.pm/elixir/Kernel.SpecialForms.html#for/1-the-into-and-uniq-options>. Mind you, if erlang were to introduce a set literal at any point in the future, I would change my opinion here rapidly. On Thursday, June 29, 2023 at 4:04:16 AM UTC-5 José Valim wrote: > This is a separate convo but I don’t see value in adding a primary syntax > for sets given we can’t really use it in pattern matching. A syntax for > only adding and removing set elements is, IMO, not worth it. > > On Thu, Jun 29, 2023 at 11:21 Christopher Keele <christ...@gmail.com> > wrote: > >> > Just throwing it out there that this notation would make for a very >> nice MapSet literal. :) >> >> :D I am deeply convinced that this is why python, in its walrus operator >> attempt >> <https://docs.python.org/3/whatsnew/3.8.html#assignment-expressions> to >> keep up with Ruby features, has not offered a response to Ruby's Hash >> assignment destructuring of {foo:, bar:}: the {} literal syntax in >> python is already overloaded for both its native associative array literal >> construct (dicts) and set literal construct (sets), which share {} as >> delimiters and cause endless confusion already. >> >> On Thursday, June 29, 2023 at 3:14:51 AM UTC-5 woj...@wojtekmach.pl >> wrote: >> >>> > %{foo, bar} >>> >>> Just throwing it out there that this notation would make for a very nice >>> MapSet literal. :) >>> >>> On 29 Jun 2023, at 10:05, Christopher Keele <christ...@gmail.com> wrote: >>> >>> > There is another idea here, which is to fix this at the tooling level. >>> > >>> > For example, we could write %{foo, bar} and have the formatter >>> automatically expand it to: %{foo: foo, bar: bar}. >>> >>> I do like this notion, but am worried about fragmentation at the tooling >>> level. >>> >>> I see a syntax addition (even if an ephemeral operator, deprecated with >>> atom garbage collection) as an elegant way to traverse this. If we lean >>> into the syntax addition of this proposal, Paul does make a valid point: >>> >>> > Make the case why *extra* syntax is better than the more limited >>> barewords-only implementation, for example, by enabling support for string >>> keys, by offering a syntax construct that can be used in more places, etc. >>> >>> Hence the proposal. However, I think a constructive outcome of this >>> discussion could be proposing exactly that expansion to tooling >>> maintainers. :) >>> >>> On Thursday, June 29, 2023 at 2:59:39 AM UTC-5 Christopher Keele wrote: >>> >>>> > Another idea is to improve Elixir LS itself to suggest the variable >>>> name itself after ":". So if I type "%{foo:", it immediately suggests " >>>> foo". So, once again, easy to write, easy to read. >>>> >>>> I think this is part of the popularity of the opinion that some such >>>> syntax should only work for structs: with Elixir LS today, starting to >>>> type >>>> a `key:` in a struct/map literal does indeed suggest from the list of >>>> known >>>> struct keys. I don't see this being impossible in LS tooling today, but >>>> also don't know much about what is possible with the language server >>>> protocol today. :) >>>> On Thursday, June 29, 2023 at 2:54:28 AM UTC-5 José Valim wrote: >>>> >>>>> There is another idea here, which is to fix this at the tooling level. >>>>> >>>>> For example, we could write %{foo, bar} and have the formatter >>>>> automatically expand it to: %{foo: foo, bar: bar}. So you get the concise >>>>> syntax when writing, the clear syntax when reading. Since most editors >>>>> format on save nowadays, it can be beneficial. Executing code with the >>>>> shortcut syntax will print a warning saying you must format the source >>>>> file >>>>> before. >>>>> >>>>> Another idea is to improve Elixir LS itself to suggest the variable >>>>> name itself after ":". So if I type "%{foo:", it immediately suggests " >>>>> foo". So, once again, easy to write, easy to read. >>>>> >>>>> On Thu, Jun 29, 2023 at 9:49 AM Christopher Keele <christ...@gmail.com> >>>>> wrote: >>>>> >>>>>> > As a counter point: Ruby has added this feature as {foo:, bar:}, >>>>>> which would have a direct translation to Elixir. Source: >>>>>> https://bugs.ruby-lang.org/issues/14579 >>>>>> >>>>>> As a Rubyist who came to Elixir in the early days for personal >>>>>> projects before that Ruby syntax was implemented, and has only been >>>>>> professionally an engineering team manager of python, JS, and TS >>>>>> applications since: I like the explicitness of Ruby's notation here, but >>>>>> still really hate it how it reads and syntax highlights. :`) >>>>>> >>>>>> That is just a personal opinion though, out of context of the utility >>>>>> of this proposal. However, I believe that incarnation for Elixir has >>>>>> been >>>>>> proposed before, and I am just searching for alternatives that would >>>>>> still >>>>>> enable field punning sooner rather than later. >>>>>> >>>>>> > You are doing great. You defend your proposal and ideas. :) >>>>>> >>>>>> Thank you! It is not easy to defend a language syntax proposal I do >>>>>> not personally adore the syntax of; but I imagine that's what many >>>>>> people >>>>>> felt like for Ruby's equivalent, with {foo:, bar:} (as I did at the >>>>>> time). I earnestly believe that this idea could mitigate pain points >>>>>> with >>>>>> Elixir adoption while reasonably contending with ES6 barewords syntax we >>>>>> are not yet able to adopt. However, I would not be heartbroken if we >>>>>> agreed >>>>>> that waiting for Elixir 2.0 and/or atom garbage collection was the right >>>>>> play here. >>>>>> >>>>>> On Thursday, June 29, 2023 at 2:33:22 AM UTC-5 José Valim wrote: >>>>>> >>>>>>> > I would argue that if we want to support only atoms, but make it >>>>>>> clear that the syntax only applies to atoms, before an Elixir 2.0, we >>>>>>> must >>>>>>> leverage atom literals in the feature. The addition of a new operator >>>>>>> (or, >>>>>>> overloading of the capture operator in previous incarnations of this >>>>>>> proposal) is the only way to accomplish this today. >>>>>>> >>>>>>> As a counter point: Ruby has added this feature as {foo:, bar:}, >>>>>>> which would have a direct translation to Elixir. Source: >>>>>>> https://bugs.ruby-lang.org/issues/14579 >>>>>>> >>>>>>> > Apologies if it feels like I am trying to torpedo other solutions, >>>>>>> that is not my intent at all. >>>>>>> >>>>>>> You are doing great. You defend your proposal and ideas. :) >>>>>>> >>>>>>> On Thu, Jun 29, 2023 at 9:29 AM Christopher Keele < >>>>>>> christ...@gmail.com> wrote: >>>>>>> >>>>>>>> Honestly, I do not adore the syntax of the proposed solution, in >>>>>>>> either capture or $ operator incarnation. I would also prefer >>>>>>>> barewords. >>>>>>>> >>>>>>>> *Re: Paul's note:* >>>>>>>> >>>>>>>> > It is not at all clear to me why supporting string keys is >>>>>>>> critical to the feature >>>>>>>> >>>>>>>> 100%, Phoenix params parsing support. This is the major obvious >>>>>>>> use-case for full-stack devs today of this proposal. If garbage >>>>>>>> collection >>>>>>>> of atoms is implemented in erlang, we could deprecate the proposed >>>>>>>> syntax >>>>>>>> readily. >>>>>>>> >>>>>>>> Most of my personal Elixir development does not use Phoenix, so I >>>>>>>> do empathize with the sentiment and prefer atoms/barewords, but have >>>>>>>> tried >>>>>>>> to accommodate the outcry for this feature in this proposal, >>>>>>>> contending >>>>>>>> with popularity of JS's barewords implementation, concerning fullstack >>>>>>>> Phoenix development on >>>>>>>> >>>>>>>> > the Elixir forum (1 >>>>>>>> <https://elixirforum.com/t/proposal-add-field-puns-map-shorthand-to-elixir/15452> >>>>>>>> , 2 >>>>>>>> <https://elixirforum.com/t/shorthand-for-passing-variables-by-name/30583> >>>>>>>> , 3 >>>>>>>> <https://elixirforum.com/t/if-you-could-change-one-thing-in-elixir-language-what-you-would-change/19902/17> >>>>>>>> , 4 >>>>>>>> <https://elixirforum.com/t/has-map-shorthand-syntax-in-other-languages-caused-you-any-problems/15403> >>>>>>>> , 5 >>>>>>>> <https://elixirforum.com/t/es6-ish-property-value-shorthands-for-maps/1524> >>>>>>>> , 6 >>>>>>>> <https://elixirforum.com/t/struct-creation-pattern-matching-short-hand/7544> >>>>>>>> ) >>>>>>>> >>>>>>>> *Re: José's note:* >>>>>>>> >>>>>>>> > I agree with Paul that we don't need to support both strings and >>>>>>>> atoms, but it must be clear that it applies to either strings or atoms. >>>>>>>> >>>>>>>> I would also prefer only supporting atoms, or even as a compromise >>>>>>>> with string confusion, only structs. Previous proposals have flighted >>>>>>>> this >>>>>>>> before, and have not succeeded. >>>>>>>> >>>>>>>> I would argue that if we want to support only atoms, but make it >>>>>>>> clear that the syntax only applies to atoms, before an Elixir 2.0, we >>>>>>>> must >>>>>>>> leverage atom literals in the feature. The addition of a new operator >>>>>>>> (or, >>>>>>>> overloading of the capture operator in previous incarnations of this >>>>>>>> proposal) is the only way to accomplish this today. >>>>>>>> >>>>>>>> If we really wanted to drive this home, we could only support atom >>>>>>>> literals in the proposal, and drop the support for strings; however, I >>>>>>>> don't see a way to resolve this tension today without employing atom >>>>>>>> literals in the feature's syntax. >>>>>>>> >>>>>>>> *Re: Paul's note:* >>>>>>>> >>>>>>>> > I really don't want this thread to devolve into argument like >>>>>>>> many of the others on this topic, but making statements like "a >>>>>>>> barewords >>>>>>>> implementation is not viable in Elixir" is not doing any favors. It is >>>>>>>> factually untrue, and the premise of the statement is based entirely >>>>>>>> on an >>>>>>>> opinion. If this thread is going to have any hope of making progress, >>>>>>>> broad >>>>>>>> assertions of that nature better be backed up with a lot of objective >>>>>>>> data. >>>>>>>> >>>>>>>> I wish there were a data-driven way to approach language design. >>>>>>>> The only tool I know of is flighting proposals with working prototypes. >>>>>>>> >>>>>>>> > Make the case why *extra* syntax is better than the more limited >>>>>>>> barewords-only implementation, for example, by enabling support for >>>>>>>> string >>>>>>>> keys, by offering a syntax construct that can be used in more places, >>>>>>>> etc. >>>>>>>> It isn't necessary for your proposal to torpedo other solutions in >>>>>>>> order to >>>>>>>> succeed, and has a better chance of doing so if you don't. >>>>>>>> >>>>>>>> This proposal makes a case for this syntax being better than a more >>>>>>>> limited barewords-only implementation. Specifically, it enables >>>>>>>> support for >>>>>>>> string keys, and offers a syntax construct that can be used in more >>>>>>>> places >>>>>>>> (as a specific example, error = "rate limit exceeded"; $:error # >>>>>>>> return error tuple. Apologies if it feels like I am trying to >>>>>>>> torpedo other solutions, that is not my intent at all. >>>>>>>> On Thursday, June 29, 2023 at 2:02:04 AM UTC-5 José Valim wrote: >>>>>>>> >>>>>>>>> Hi Chris Keele, thank you for the excellent proposal. I just want >>>>>>>>> to add that I agree with Paul that we don't need to support both >>>>>>>>> strings >>>>>>>>> and atoms, but it must be clear that it applies to either strings or >>>>>>>>> atoms >>>>>>>>> (if it supports only one of them) and the reason for that is because >>>>>>>>> otherwise it will add to the string vs atom confusion that already >>>>>>>>> exists >>>>>>>>> in the language. Someone would easily write def show(conn, %{id}) and >>>>>>>>> be >>>>>>>>> surprised why it doesn't match. >>>>>>>>> >>>>>>>>> A couple additional thoughts to the thread: >>>>>>>>> >>>>>>>>> * : in JS and = in Haskell/OCaml are operators. : in Elixir is not >>>>>>>>> an operator >>>>>>>>> >>>>>>>>> * &:foo/$:foo as a shortcut for {:foo, foo} is interesting but >>>>>>>>> note that "foo: foo" already work as a shortcut in select places - so >>>>>>>>> we >>>>>>>>> would introduce more ways of doing something similar >>>>>>>>> >>>>>>>>> * Elixir and Ruby shares a lot syntax wise, it may be worth >>>>>>>>> revisiting what they do and which points arose in their >>>>>>>>> discussions/implementations >>>>>>>>> >>>>>>>>> On Thu, Jun 29, 2023 at 8:51 AM Paul Schoenfelder < >>>>>>>>> paulscho...@fastmail.com> wrote: >>>>>>>>> >>>>>>>>>> For reasons explained in Austin's reply >>>>>>>>>> <https://groups.google.com/g/elixir-lang-core/c/P6VprVlRd6k/m/ijxO7HdpAgAJ>, >>>>>>>>>> >>>>>>>>>> a "barewords" implementation is not viable in Elixir, because of the >>>>>>>>>> prevalence of both atom and string key types. >>>>>>>>>> >>>>>>>>>> IMO, discussing the nuance of if a barewords representation >>>>>>>>>> should prefer atoms or keys is what has been continually holding >>>>>>>>>> this >>>>>>>>>> feature up for a decade, and that's what this proposal tries to move >>>>>>>>>> past. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> I don't agree that the rationale given by Austin is sufficient to >>>>>>>>>> reject a barewords-only implementation of field punning in Elixir. >>>>>>>>>> It is >>>>>>>>>> not at all clear to me why supporting string keys is critical to the >>>>>>>>>> feature, and I especially don't find the argument that people will >>>>>>>>>> ignore >>>>>>>>>> all of the plentiful advice about avoiding atom table exhaustion >>>>>>>>>> just so >>>>>>>>>> they can use field punning (e.g. switching to `Jason.parse(.., keys: >>>>>>>>>> atoms)`) compelling, at all. There will always be people who find a >>>>>>>>>> way to >>>>>>>>>> do dumb things in their code, but languages (thankfully) don't base >>>>>>>>>> their >>>>>>>>>> designs on the premise that most of their users are idiots, and I >>>>>>>>>> don't see >>>>>>>>>> why it would be any different here. >>>>>>>>>> >>>>>>>>>> I've seen this debate come up over and over since the very first >>>>>>>>>> time it was brought up on this list, and there is a good reason why >>>>>>>>>> it >>>>>>>>>> keeps dying on the vine. The justification for field punning is weak >>>>>>>>>> to >>>>>>>>>> begin with, largely sugar that benefits the code author rather than >>>>>>>>>> the >>>>>>>>>> reader, and syntax sugar must carry its own weight in the language, >>>>>>>>>> and the >>>>>>>>>> only chance of that here is by building on the foundations laid by >>>>>>>>>> other >>>>>>>>>> languages which have it. Doing so means readers are much more likely >>>>>>>>>> to >>>>>>>>>> recognize the syntax for what it is, it adds no new >>>>>>>>>> sigils/operators, and >>>>>>>>>> it is narrowly scoped yet still convenient in many common scenarios. >>>>>>>>>> If >>>>>>>>>> anything, the desire to make this work for string keys is what keeps >>>>>>>>>> killing this feature, not the other way around. >>>>>>>>>> >>>>>>>>>> I really don't want this thread to devolve into argument like >>>>>>>>>> many of the others on this topic, but making statements like "a >>>>>>>>>> barewords >>>>>>>>>> implementation is not viable in Elixir" is not doing any favors. It >>>>>>>>>> is >>>>>>>>>> factually untrue, and the premise of the statement is based entirely >>>>>>>>>> on an >>>>>>>>>> opinion. If this thread is going to have any hope of making >>>>>>>>>> progress, broad >>>>>>>>>> assertions of that nature better be backed up with a lot of >>>>>>>>>> objective data. >>>>>>>>>> Make the case why *extra* syntax is better than the more limited >>>>>>>>>> barewords-only implementation, for example, by enabling support for >>>>>>>>>> string >>>>>>>>>> keys, by offering a syntax construct that can be used in more >>>>>>>>>> places, etc. >>>>>>>>>> It isn't necessary for your proposal to torpedo other solutions in >>>>>>>>>> order to >>>>>>>>>> succeed, and has a better chance of doing so if you don't. >>>>>>>>>> >>>>>>>>>> Paul >>>>>>>>>> >>>>>>>>>> On Thu, Jun 29, 2023, at 12:40 AM, Christopher Keele wrote: >>>>>>>>>> >>>>>>>>>> > This proposal mentions OCaml, Haskell and JS as prior works of >>>>>>>>>> art for >>>>>>>>>> > this type of feature. I think a key thing to point out is that >>>>>>>>>> in those >>>>>>>>>> > languages, they did not need to add additional syntax in order >>>>>>>>>> to >>>>>>>>>> > support this. >>>>>>>>>> >>>>>>>>>> This is true, and the discomfort extends to Ruby as well. >>>>>>>>>> >>>>>>>>>> For reasons explained in Austin's reply >>>>>>>>>> <https://groups.google.com/g/elixir-lang-core/c/P6VprVlRd6k/m/ijxO7HdpAgAJ>, >>>>>>>>>> >>>>>>>>>> a "barewords" implementation is not viable in Elixir, because of the >>>>>>>>>> prevalence of both atom and string key types. >>>>>>>>>> >>>>>>>>>> IMO, discussing the nuance of if a barewords representation >>>>>>>>>> should prefer atoms or keys is what has been continually holding >>>>>>>>>> this >>>>>>>>>> feature up for a decade, and that's what this proposal tries to move >>>>>>>>>> past. >>>>>>>>>> >>>>>>>>>> Perhaps in an ideal Elixir 2.0 future if we get garbage >>>>>>>>>> collection of atoms like Ruby, Phoenix can move over to parsing >>>>>>>>>> params with >>>>>>>>>> atom-based key pairs, we can drop the operator and atom/string >>>>>>>>>> differentiation, and move the entire syntax over to barewords. Worth >>>>>>>>>> calling out that this proposal (with a new operator, not the capture >>>>>>>>>> operator) could remain backwards-compatible with the proposed syntax >>>>>>>>>> if we >>>>>>>>>> moved into an atom-oriented Phoenix params parsing Elixir 2.0 future. >>>>>>>>>> >>>>>>>>>> As Elixir 2.0 may never get released, famously, this is the only >>>>>>>>>> clear path I see forward for our production applications today to >>>>>>>>>> get field >>>>>>>>>> punning, that skirts issues with prior art. >>>>>>>>>> On Wednesday, June 28, 2023 at 11:27:48 PM UTC-5 me wrote: >>>>>>>>>> >>>>>>>>>> This proposal mentions OCaml, Haskell and JS as prior works of >>>>>>>>>> art for >>>>>>>>>> this type of feature. I think a key thing to point out is that in >>>>>>>>>> those >>>>>>>>>> languages, they did not need to add additional syntax in order to >>>>>>>>>> support this. >>>>>>>>>> >>>>>>>>>> In OCaml, the syntax goes from >>>>>>>>>> >>>>>>>>>> { foo = foo; bar = bar } >>>>>>>>>> >>>>>>>>>> to >>>>>>>>>> >>>>>>>>>> { foo; bar } >>>>>>>>>> >>>>>>>>>> Haskell starts with >>>>>>>>>> >>>>>>>>>> C { foo = foo, bar = bar } >>>>>>>>>> >>>>>>>>>> and turns into >>>>>>>>>> >>>>>>>>>> C { foo, bar } >>>>>>>>>> >>>>>>>>>> And lastly, Javascript uses >>>>>>>>>> >>>>>>>>>> { foo: foo, bar: bar } >>>>>>>>>> >>>>>>>>>> which can be used as >>>>>>>>>> >>>>>>>>>> { foo, bar } >>>>>>>>>> >>>>>>>>>> Note the lack of additional syntax surrounding these features. >>>>>>>>>> >>>>>>>>>> > {foo, bar, baz} = {1, 2, 3} >>>>>>>>>> > >>>>>>>>>> > %{$:foo, "fizz" => "buzz", $"bar", fizz: :buzz} >>>>>>>>>> > # => %{:fizz => :buzz, :foo => 1, "bar" => 2, "fizz" => "buzz"} >>>>>>>>>> >>>>>>>>>> If I were coming from one of the above languages (or any other >>>>>>>>>> language >>>>>>>>>> that supports this feature), I would not look at this syntax and >>>>>>>>>> say >>>>>>>>>> "This is field punning". I would have no intuition what is going >>>>>>>>>> on. >>>>>>>>>> >>>>>>>>>> Speaking as someone that has a decent amount of Elixir experience, >>>>>>>>>> $"bar" looks like it should be closer in functionality to :"bar" >>>>>>>>>> than >>>>>>>>>> field punning. Or maybe even similar to using ? to find the >>>>>>>>>> codepoint of >>>>>>>>>> a single character. Something to keep in mind, Erlang actually >>>>>>>>>> uses $ >>>>>>>>>> for the same purpose that Elixir uses ?. I'm not saying Elixir >>>>>>>>>> couldn't >>>>>>>>>> use the same token/operator for a different purpose, I just think >>>>>>>>>> it is >>>>>>>>>> something that should be considered. >>>>>>>>>> >>>>>>>>>> Justin >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> 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 elixir-lang-co...@googlegroups.com. >>>>>>>>>> To view this discussion on the web visit >>>>>>>>>> https://groups.google.com/d/msgid/elixir-lang-core/aee0f98a-9b9b-4ff0-9a48-08d4e31df8c5n%40googlegroups.com >>>>>>>>>> >>>>>>>>>> <https://groups.google.com/d/msgid/elixir-lang-core/aee0f98a-9b9b-4ff0-9a48-08d4e31df8c5n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>>>> . >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> 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 elixir-lang-co...@googlegroups.com. >>>>>>>>>> >>>>>>>>> To view this discussion on the web visit >>>>>>>>>> https://groups.google.com/d/msgid/elixir-lang-core/72586965-c3ee-42c0-b7d3-7e863ace2706%40app.fastmail.com >>>>>>>>>> >>>>>>>>>> <https://groups.google.com/d/msgid/elixir-lang-core/72586965-c3ee-42c0-b7d3-7e863ace2706%40app.fastmail.com?utm_medium=email&utm_source=footer> >>>>>>>>>> . >>>>>>>>>> >>>>>>>>> >>>>>>>> -- >>>>>>>> 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 elixir-lang-co...@googlegroups.com. >>>>>>>> >>>>>>> To view this discussion on the web visit >>>>>>>> https://groups.google.com/d/msgid/elixir-lang-core/7134e702-f9b2-44ad-bf33-3b8a633862d7n%40googlegroups.com >>>>>>>> >>>>>>>> <https://groups.google.com/d/msgid/elixir-lang-core/7134e702-f9b2-44ad-bf33-3b8a633862d7n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>> . >>>>>>>> >>>>>>> >>>>>> -- >>>>>> 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 elixir-lang-co...@googlegroups.com. >>>>>> >>>>> To view this discussion on the web visit >>>>>> https://groups.google.com/d/msgid/elixir-lang-core/d265a338-e815-4e6b-a541-e61e2ec89611n%40googlegroups.com >>>>>> >>>>>> <https://groups.google.com/d/msgid/elixir-lang-core/d265a338-e815-4e6b-a541-e61e2ec89611n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>> . >>>>>> >>>>> >>> -- >>> 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 elixir-lang-co...@googlegroups.com. >>> >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/elixir-lang-core/d0d6b9a6-b2d0-4a83-8cc0-f8580e151404n%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/elixir-lang-core/d0d6b9a6-b2d0-4a83-8cc0-f8580e151404n%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >>> >>> -- >> 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 elixir-lang-co...@googlegroups.com. >> > To view this discussion on the web visit >> https://groups.google.com/d/msgid/elixir-lang-core/4b0b7343-2d02-4424-9341-8d33c45be40fn%40googlegroups.com >> >> <https://groups.google.com/d/msgid/elixir-lang-core/4b0b7343-2d02-4424-9341-8d33c45be40fn%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- 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 elixir-lang-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/cdadb6a0-9bee-434c-8243-928ec9f872e5n%40googlegroups.com.