Hi, that is a very interesting use case, and IMO a very valid one. Currently the semantics are, to also explain the correct syntax of the pair that follows a 'use NAME': :auth<Bar> and :ver<1.2> etc are of type Pair. Wenn the compiler hits a use statement, it smartmatches the distribution's auth/name/ver against the value of the corresponding Pair.
That means these Pairs are valid: :auth<Bar> # match literally :auth(/\w+/) # regex match :auth($author) # okay if $author is known at compile time :auth(*.chars == 6) # oaky, whatevercode :auth({ $_.starts-with('Bla') }) # okay, closure :auth(-> $auth { $auth ~~ /Bla/ }) # okay, something callable with arity == 1 :auth({ $^auth ~~ /Bla/ }) # okay, something callable with arity == 1 etc That also means we cannot match different version patterns for different :auth patterns, because we only pass one value to the Pair's value to smartmatch against. What I can imagine though is that if the matcher is callable, and has an arity of 2, we pass the CompUnit as the first and the $auth as the second argument. That needs consensus in #perl6 though. Cheers, Tobias Am 11.06.2015 um 05:26 schrieb Darren Duncan: > So I have a question about versioning, either/especially about > compilation units, but also Perl 6 itself. > > For context I refer to http://design.perl6.org/S11.html#Versioning . > > With regard to "use" statements and specifying 'auth' or 'ver' to > restrict between versions, it seems to me that the spec defines them > interacting in a cross-product fashion. > > For example, given this possibly incorrect syntax: > > use Dog:auth<cpan:TPF cpan:JRANDOM>:ver(4-6, 10-15); > > ... that would be satisfied by any of TPF versions 4-6,10-15 or > JRANDOM versions 4-6,10-15. > > However, what I want is to restrict the 'ver' differently depending on > the 'auth', treating them more as the hierarchy they are, assuming > that different authorities may go off and use different versioning > schemes. > > The question I have is how to 'or' the following into a single 'use > Dog' that isn't any less restrictive: > > use Dog:auth<cpan:TPF>:ver(v1.2.1..v1.2.3); > use Dog:auth<cpan:JRANDOM>:ver(v14.3..v16.2); > > That is, the cross-product answer is not restrictive enough. > > I don't know if this hypothetical use case has been discussed before, > but if not, I hope that the Perl 6 specification has or can gain a > clean way to say how its done. > > Thank you. > > -- Darren Duncan