For anyone interested I published a proof-of-concept for this
here: https://github.com/elixir-lang/elixir/pull/9640
W dniu piątek, 25 października 2019 20:21:54 UTC+2 użytkownik OvermindDL1
napisał:
>
> I've always thought that structs could use a 'constructor' format like
> `%URI("https://elixirforums.com/")`, and it would just be rewritten in
> code to be `URI.create("https://elixirforums.com/")` *with*
> auto-requiring of it so macro's work out-right (though that could of course
> be optional in an actual spec perhaps). I could imagine a Pid being like
> `%Process.Pid(0, 55, 0)` or so.
>
> However, I'm not sure it really gains much to the language. Sure I don't
> like the `#...` inspections of things like `PID`'s, but I still wouldn't
> add the above. Instead I'd standardize on inspections being a
> representative object, so PID's instead of printing like `#PID<...>` they
> should print 'as' the fully construction as however they should be
> constructed, even if it is an IEX only style constructor.
>
> On Friday, October 25, 2019 at 7:56:57 AM UTC-6, Ben Olive wrote:
>>
>> I really like the idea of a syntax that delegates to a module!
>>
>> That would make a pid something like `%Process<0.55.0>` or `
>> %Process.Pid<0.55.0>` which is't a big stretch from the current `
>> #PID<0.55.0>`
>>
>> On Fri, Oct 25, 2019 at 8:49 AM Kelvin Raffael Stinghen <
>> [email protected]> wrote:
>>
>>> > So I really don't think this feature would be usable with sigils.
>>>
>>> Yeah, sure, I was just trying to think of examples of the top of my
>>> head, I’m sure it would still have a lot of limitations, but I think it
>>> would be worth the try.
>>>
>>> > No, they are enforced by the language.
>>>
>>> I see. I vote for only caring for the first letter then.
>>>
>>> > So this is a separate discussion but what I'd rather see is another
>>> sigil like mechanism for structs that would make these valid:
>>> >
>>> > URI[https://elixir-lang.org]]
>>>
>>> Why not actually using sigils for that? With multi letter sigils we
>>> could do that. Would you want to automatically import that? If that’s the
>>> case, maybe a better syntax for the feature would be something like: `%URI”
>>> https://elixir-lang.org”`, so that would delegate the construction to a
>>> `from_string` function (or macro) on the module for example.
>>>
>>> Anyway, I like your idea too, but as you mentioned, that would not
>>> address my concern, as PIDs are not structs, so I think that multi letter
>>> sigils would be the way to go for that, since it looks like adding one more
>>> one letter sigil for it will not get accepted.
>>>
>>> Best,
>>> Kelvin Stinghen
>>> [email protected]
>>>
>>> On Oct 25, 2019, at 04:00, José Valim <[email protected]>
>>> wrote:
>>>
>>> Maybe*. Sigils follow the rules for strings, so they are not really good
>>> for handling code and this was one of the lessons learned by the
>>> shorter_maps project. For example, imagine you want to do this:
>>>
>>> ~Project{id ~Manager{id}}
>>>
>>> It doesn't really work because you have to escape the closing } inside
>>> the manager. Sure, you could alternate {...} with <...> or something else,
>>> but that's precisely the point. Sigils are strings, and they are not
>>> structured text, so you have to escape and handle delimiters accordingly.
>>>
>>> The other issue is that sigils are currently lexical, so you would have
>>> to import the lexical sigil for every struct before your shorter maps
>>> proposal. So I really don't think this feature would be usable with sigils.
>>>
>>>
>>> --
>>> 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/6ACCD0A4-30C6-4E47-852F-FC4A16EB5CB3%40gmail.com
>>>
>>> <https://groups.google.com/d/msgid/elixir-lang-core/6ACCD0A4-30C6-4E47-852F-FC4A16EB5CB3%40gmail.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/d37fc491-baa1-453a-a086-088d3ae21e88%40googlegroups.com.