I was considering making it only accept keywords, and return keywords as 
well.

However, I can see benefits in accepting Enumerables. What do you think 
about using another verb such as cast or coerce, instead of validate, for 
this typing 
(e.g. @spec Keyword.cast!(Enumerable.t(), keyword) :: keyword | no_return 
and @spec Map.cast!(Enumerable.t(), keyword) :: map | no_return)?

Should I also implement it for Map as well, or maybe add it in a second PR?

Thanks for the idea on Enumerables!
Em segunda-feira, 26 de julho de 2021 às 12:47:31 UTC-3, Wojtek Mach 
escreveu:

> Keyword.validate will accept just a keyword, right? Did you consider 
> making it accept any enumerable of pairs, just like Keyword.new does? Same 
> for Map.
>
> I think one particular scenario is something like this:
>
>     def foo(opts) when is_list(opts) do
>       config = Map.validate!(opts, …)
>       config.name # the assertive map.key is really convenient here
>
> what do you think? The only concern, besides feature creep :), is perhaps 
> validate is not the best name given it accepts broader set of inputs. But 
> then again, Keyword.keyword and in particular Map.map are maybe a bit 
> awkward. 
>
> On July 26, 2021, josevalim <jose....@gmail.com> wrote:
>
> I debated this with the Elixir team and we agreed on the following API:
>     Keyword.validate! :: keyword | no_return    Keyword.validate :: {:ok, 
> keyword} | {:error, unknown_keys, missing_keys}
> The same functionality would have to be defined for Map.
> The API for Keyword.validate! and Map.validate! would be the exact same as 
> the one found in Nx.Defn.Kernel.keyword!.
> Could you please send a PR? Or open up an issue if you can't submit it at 
> the moment. 
>
> Thanks!On Monday, July 12, 2021 at 12:46:38 PM UTC+2 polva...@gmail.com 
> wrote:
>
> > I would propose to add this to the Kernel module, to mirror the struct! 
>> helper. But adding to Keyword also works. Thoughts?
>>
>> Makes sense! I suggested Keyword mostly because there's the module 
>> already, but since we have struct! in Kernel, it might be better to have 
>> keyword! there too. Usage would also be nicer this way.
>>
>> > Should the bang version really raise for redundant options?
>>
>> As José said, it would help clean out stray options being passed. I can 
>> think of a few cases in which I thought one option was being used, but had 
>> either a typo or wrong name altogether (think "end" vs "end_datetime" sort 
>> of situation).
>> However, I can see a less strict version being useful as well. Perhaps 
>> there could be a keyword!/3 which accepted options like: keyword!(opts, 
>> [extra_keys: true], key1: :default1, key2: :default2)
>>
>>  -- 
>  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/9b83a803-c2c1-49e7-a531-56791607bcaan%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/elixir-lang-core/9b83a803-c2c1-49e7-a531-56791607bcaan%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/a96fb19a-8148-41dc-8b45-0e2b9fe755b8n%40googlegroups.com.

Reply via email to