José, you are so gracious in dealing with the Elixir community. I appreciate 
that very much. It has inspired me to work to be more gracious in my own life.

-Greg Vaughn


> On Apr 16, 2019, at 7:18 PM, José Valim <jose.va...@plataformatec.com.br> 
> wrote:
> 
> Hi Tom,
> 
> You probably meant it as a joke but just keep in mind jokes do not translate 
> well to text.
> 
> Evaluating the language proposals is often tiresome and it is work that is 
> not always appreciated, so it is probably best for everyone to stay in topic.
> 
> Thanks,
> 
> On Wed, Apr 17, 2019 at 02:03 <t...@scalpel.com> wrote:
> Ok we'll paint the bikeshed green.
> 
> On Tuesday, April 16, 2019 at 7:36:51 PM UTC-4, José Valim wrote:
> They probably shouldn't been lists in the first place but that ship sailed a 
> long time ago.
> 
> If you need to work with them dynamically, the API is there. It just 
> shouldn't be encouraged and adding functions such as Tuple.wrap could end-up 
> having the opposite effect: encouraging more dynamic work making everyone's 
> life harder, rather than easier.
> 
> 
> José Valim
> www.plataformatec.com.br
> Skype: jv.ptec
> Founder and Director of R&D
> 
> 
> On Wed, Apr 17, 2019 at 1:32 AM <t...@scalpel.com> wrote:
> I agree that they are rarely used dynamically, but when they are they can be 
> quite the pain to work with. 
> 
> For example, if you are doing any work with ASN.1 dynamic tuples are 
> everywhere. Any advanced work in cryptography or telecom becomes harder to 
> work with than I would like it to be.
> 
> On Tuesday, April 16, 2019 at 7:24:15 PM UTC-4, José Valim wrote:
> Well, the difference is really in their usage. Tuples are rarely used 
> dynamically, you usually want to see tuples as literals in your code. The 
> Tuple docs also mention it:
> 
> > The functions in this module that add and remove elements from tuples are
> > rarely used in practice, as they typically imply tuples are being used as
> > collections. To append to a tuple, it is preferable to use pattern matching
> 
> 
> José Valim
> www.plataformatec.com.br
> Skype: jv.ptec
> Founder and Director of R&D
> 
> 
> On Wed, Apr 17, 2019 at 1:20 AM <t...@scalpel.com> wrote:
> I see your point.
> 
> I was thinking more along the lines of consistency in the API design. If you 
> can wrap an item in a list why can't you wrap it in a tuple? If you could 
> wrap things in tuples then you could insert a value at the front of said 
> tuple.This is more of an exercise in "you could" rather than "you should".
> 
> On Tuesday, April 16, 2019 at 7:07:33 PM UTC-4, José Valim wrote:
> If the choice is between:
> 
> value |> Tuple.wrap() |> Tuple.insert_at(0, :ok)
> 
> and
> 
> {:ok, value}
> 
> I believe we should choose the second every time.
> 
> If the choice is between:
> 
> value
> |> very()
> |> long()
> |> pipeline()
> |> Tuple.wrap()
> |> Tuple.insert_at(0, :ok)
> 
> and:
> 
> value
> |> very()
> |> long()
> |> pipeline()
> |> OkError.ok()
> 
> and:
> 
> var = 
>   value
>   |> very()
>   |> long()
>   |> pipeline()
> 
> {:ok, var}
> 
> I don't see any reason why we should ever do the first one.
> 
> So I really don't see which problem Tuple.wrap is supposed to solve.
> 
> José Valim
> www.plataformatec.com.br
> Skype: jv.ptec
> Founder and Director of R&D
> 
> 
> On Wed, Apr 17, 2019 at 12:58 AM <t...@scalpel.com> wrote:
> I understand that this is possible, and thank you for the suggestion but I'm 
> not the biggest fan of anonymous functions.
> 
> When I go back and read programs written this way I can't tell if I wrote the 
> code or a cat walked on my keyboard.
> 
> On Tuesday, April 16, 2019 at 6:54:16 PM UTC-4, Ryan Winchester wrote:
> Yeah, sorry
> 
> value |> (&{:ok, &1}).()
> 
> On April 16, 2019 at 3:51:28 PM, Ryan Winchester (he...@ryanwinchester.ca ) 
> wrote:
> 
>> value |> (&{&1}).() |> Tuple.insert_at(0, :ok)
>> 
>> On April 16, 2019 at 3:47:58 PM, t...@scalpel.com (t...@scalpel.com ) wrote:
>> 
>>> Fair enough, I know when to give up on a losing battle. 
>>> 
>>> Would you consider an alternative like Tuple.wrap/1. It would work exactly 
>>> like List.wrap/1 but doesn't carry the baggage that "error" and "ok" would 
>>> have. This way I could still accomplish the goal of keeping pipe chains 
>>> clean with something like.
>>> 
>>> value |> Tuple.wrap() |> Tuple.insert_at(0, :ok)
>>> 
>>> Which is a bit wordier but functionally equivalent to the original 
>>> proposal.                                     
>>> 
>>> On Tuesday, April 16, 2019 at 6:04:55 PM UTC-4, José Valim wrote:
>>> Hi Tom,
>>> 
>>> You don't have to buy the arguments, we can agree to disagree, but they are 
>>> still the reason for not adding such functions to Elixir. :)
>>> 
>>> I also agree with is_even and is_odd being similar convenience functions 
>>> but they do have a rationale. They were added before defguard existed. At 
>>> the time, writing guards was a bit more bureaucratic. But if is_odd/is_even 
>>> were proposed today, they would most likely have been rejected as well.
>>> 
>>> Elixir already has a perfectly fine syntax via curly brackets for creating 
>>> ok and error tuples, that also works on matching, so my recommendation is 
>>> still to build an extra vocabulary in your app or as a separate library.
>>> 
>>> José Valim
>>> www.plataformatec.com.br
>>> Skype: jv.ptec
>>> Founder and Director of R&D
>>> 
>>> 
>>> On Tue, Apr 16, 2019 at 11:46 PM <t...@scalpel.com > wrote:
>>> I disagree that this should be a library. (I've already done this in my app 
>>> and would be fine extracting it into one though) I don't buy the slippery 
>>> slope argument.  The functions are very simple to create and maintain, and 
>>> it's not like the Tuple module is overflowing with complexity. We have 
>>> things like 'is_even' and 'is_odd' because they are common to work with. 
>>> :ok and :error are insanely common in elixir codebases. Why not add 
>>> convenience methods?
>>> 
>>> On Tuesday, April 16, 2019 at 5:22:38 PM UTC-4, José Valim wrote:
>>> Hi Tom, thanks for the proposal.
>>> 
>>> As OvermindDL1 already hinted, this can lead to a slippery slope where we 
>>> need to add bang variants, question mark variants, ok/1/2/3/4 to deal with 
>>> arities and so on. I would suggest building this vocabulary as necessary in 
>>> your applications or, if you want to share it with the world, it could be a 
>>> nice library. Hint: the package ok_error seems to be available. :)
>>> 
>>> José Valim
>>> www.plataformatec.com.br
>>> Skype: jv.ptec
>>> Founder and Director of R&D
>>> 
>>> 
>>> On Tue, Apr 16, 2019 at 11:12 PM OvermindDL1 <overm...@gmail.com > wrote:
>>> On Tuesday, April 16, 2019 at 3:04:13 PM UTC-6, t...@scalpel.com wrote:
>>> It is often the case that you want to wrap the result of an operation in an 
>>> ":ok" or ":error" Tuple. We should add convenience wrapper functions since 
>>> this is so common and it cleans up otherwise ugly code.
>>> 
>>> def ok(value), do: {:ok, value}
>>> def error(value), do: {:error, value}
>>> 
>>> This could be quite useful!  On the other side it would be useful to add 
>>> functions like these as well:
>>> 
>>> def ok!({:ok, value}), do: value
>>> 
>>> def ok?({:ok, _value}), do: true
>>> def ok?(_), do: false
>>> 
>>> And so forth for error as well.  They are not really useful on their own 
>>> because matching is better, but for use in pipes that would be quite useful 
>>> (right now I use the exceptional library, which does similar things and 
>>> more).
>>> --
>>> 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-l...@googlegroups.com .
>>> To view this discussion on the web visit https://groups.google.com/d/       
>>>                                                                    
>>> msgid/elixir-lang-core/ 30614530-7e33-4cb8-bffb- 
>>> 63c18248d340%40googlegroups. com .
>>> For more options, visit https://groups.google.com/d/ optout .
>>> --
>>> 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-l...@ googlegroups.com .
>>> To view this discussion on the web visit https://groups.google.com/d/ 
>>> msgid/elixir-lang-core/ 0314757d-eff2-4b23-8130- 
>>> a19ee921b254%40googlegroups. com .
>>> For more options, visit https://groups.google.com/d/ optout .
>>> --
>>> 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-l...@googlegroups.com .
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/elixir-lang-core/2e7204c7-6d06-49f9-8edc-7c631f75063a%40googlegroups.com
>>>  .
>>> For more options, visit https://groups.google.com/d/optout .
> 
> -- 
> 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-l...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/elixir-lang-core/721abcf1-0cfd-4824-b54a-ff2aa22487f3%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
> 
> -- 
> 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-l...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/elixir-lang-core/5607dc54-2c5d-452c-a5a5-fa6ec03864c3%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
> 
> 
> -- 
> 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-l...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/elixir-lang-core/50776062-e75d-4f31-8266-2b633e78bf89%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
> 
> -- 
> 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/f1c5a753-6964-466b-aabb-5f8cdb7c7ec0%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
> -- 
> 
> 
> José Valim
> www.plataformatec.com.br
> Skype: jv.ptec
> Founder and Director of R&D
> 
> -- 
> 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/CAGnRm4%2Bmvy5%3DC3cgwMPquPsrM32JjNdn0mxdsvOthLt0eXU4yg%40mail.gmail.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
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/0482DC4E-5021-44C1-846C-ABABF265BAD3%40gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to