Correct. My concern is someone having "@type one_of(X)" as an existing type.
On Sat, May 16, 2020 at 11:04 AM Wiebe-Marten Wijnja <[email protected]> wrote: > I like the name `one_of` exactly because it is similar to what is in use > by e.g. `StreamData` right now. > > If the construct is specific to Kernel.Typespec, then this would also > limit conflicts with existing code, right? > On 16-05-2020 10:40, José Valim wrote: > > We wouldn't make it a macro per so, but a construct specific to > Kernel.Typespec. It should be straight-forward. My biggest concern at this > point is the name. :) > > > On Sat, May 16, 2020 at 10:21 AM Kip <[email protected]> wrote: > >> I had the `one_of` approach as my other alternative but figured adding >> another function to Kernel (or elsewhere) may not be in favour. What do you >> suggest I do next to progress this `one_of` idea as a poc? >> >> Thanks too for the reduction, my attempts were making that far too >> complicated! >> >> On Saturday, May 16, 2020 at 3:29:27 PM UTC+8, José Valim wrote: >>> >>> Today you can do it like this: >>> >>> var = Enum.reduce(@list, &{:|, _. [&1, &2]} >>> @type foo :: unquote(var) >>> >>> But it may be worth introducing something like you describe but it >>> probably makes sense to do it via a construct, such as @type foo :: >>> one_of(@var) that does the conversion for you. I think automatically >>> converting the list can be confusing, because people may think that [:foo, >>> :bar] implies a specific ordering, for example. >>> >>> I am just not sure of a good name. one_of may conflict with existing >>> code. >>> >>> On Sat, May 16, 2020 at 6:25 AM Kip <[email protected]> wrote: >>> >>>> It's not uncommon to have domain overlap between lists of valid tokens >>>> (used for validations) and type specs. For example: >>>> >>>> @standard_formats [ >>>> :standard, >>>> :accounting, >>>> :currency, >>>> :percent >>>> ] >>>> >>>> @currency_formats [ >>>> :currency, >>>> :accounting, >>>> :currency_long, >>>> :currency_short >>>> ] >>>> >>>> @currency_symbol [ >>>> :standard, >>>> :iso >>>> ] >>>> >>>> @type standard_formats :: :standard | :currency | :accounting | >>>> :short | :long >>>> @type currency_formats :: :currency_short | :currency_long | >>>> :decimal_short | :decimal_long >>>> @type currency_symbol :: :standard | :iso >>>> >>>> It would go good to remove one source of error by being able to allow >>>> compile time use of a list as the subject of @typespec. For example: >>>> >>>> @type currency_symbol :: @currency_symbol # Any compile-time resolvable >>>> list >>>> >>>> Of course a macro can be introduced to do this but its quite difficult >>>> to achieve since it requires manual manipulation of AST. >>>> >>>> Proposal worth considering? Or consign to the history of my >>>> less-than-helpful ideas :-) >>>> >>>> >>>> -- >>>> 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/36f821aa-d718-48aa-a9e8-2f6d5e440632%40googlegroups.com >>>> <https://groups.google.com/d/msgid/elixir-lang-core/36f821aa-d718-48aa-a9e8-2f6d5e440632%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 [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/elixir-lang-core/3577d145-b325-4c67-806c-d634df15ad5a%40googlegroups.com >> <https://groups.google.com/d/msgid/elixir-lang-core/3577d145-b325-4c67-806c-d634df15ad5a%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 [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4%2Bqvg4suaUa6CTDUavrjcZq-U3-2k08m7MMhKBEo7Fakw%40mail.gmail.com > <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4%2Bqvg4suaUa6CTDUavrjcZq-U3-2k08m7MMhKBEo7Fakw%40mail.gmail.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 [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/elixir-lang-core/0924dfca-d4e8-c28d-9261-c094f481dc76%40resilia.nl > <https://groups.google.com/d/msgid/elixir-lang-core/0924dfca-d4e8-c28d-9261-c094f481dc76%40resilia.nl?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 [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4%2BYAhJbSpPS8_R-QW5owt3TcnRLr1n9_Gp%3Dny8XqbCVBA%40mail.gmail.com.
