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 <javascript:>> 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 
>>>>>>> <https://groups.google.com/d/msgid/elixir-lang-core/30614530-7e33-4cb8-bffb-63c18248d340%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>>  
>>>>>>> .
>>>>>>> For more options, visit https://groups.google.com/d/ optout 
>>>>>>> <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 
>>>>> <https://groups.google.com/d/msgid/elixir-lang-core/0314757d-eff2-4b23-8130-a19ee921b254%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>  
>>>>> .
>>>>> For more options, visit https://groups.google.com/d/ optout 
>>>>> <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
>>>  
>>> <https://groups.google.com/d/msgid/elixir-lang-core/2e7204c7-6d06-49f9-8edc-7c631f75063a%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>  
>>> .
>>> 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 <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/elixir-lang-core/721abcf1-0cfd-4824-b54a-ff2aa22487f3%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/elixir-lang-core/721abcf1-0cfd-4824-b54a-ff2aa22487f3%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> 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/5607dc54-2c5d-452c-a5a5-fa6ec03864c3%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to