> On 31 May 2017, at 12:25, cle-pe...@qiao.in-berlin.de wrote:
> 
> Hello,
> 
> I am already following Perl 6 since many years. But only recently as books 
> began to appear, I began to really learn it.
> 
> One of the many things I like on Perl 6 is its static typing possibility. I 
> am used to dynamical typed languages like Perl 5, Ruby, Python ... you name 
> it. But I am very fond of strong static typing especially if it comes with 
> automatic type inference like in languages like OCaml, Go and recently C++ 
> since 2011. But I like languages like Ada too :-)
> 
> Now I would like to define two datatypes  in Perl 6 deriving from `Int` but 
> being incompatible with `Int` the same time.
> 
> For instance:
> 
>  `Distance` derived from `Int` with a range 0 up to 32000, and
>  `Offset` derived from `Int` with a range from -32000 up to 32000
> 
> Now I would like the types `Distance`, `Offset` and `Int` being 
> distinguishable and incompatible to each other on default.
> 
> So (pseudo Perl 6):
> 
>  my Distance $d = Distance(12);  // ok
>  my Offset $o = Offset(-1);      // ok
>  my Distance $d2 = $o;           // BUMMER!
> 
>  say $d + $o;                    // BUMMER!
> 
> and so on! I want the Perl 6 compiler to complain if I ever try to mix 
> `Distance`s and `Offset`s implicitly.
> 
> In my books I've read so far there was no hint how to achieve this. Asking 
> Google for some days also offer me no any answer whether this is possible, 
> and if it is, how?
> 
> I found about `subset` but this only put some restriction on a type, but does 
> not render it incompatible to the original type. Furthermore it is not 
> distinguishable from the original type if its restrictions are met in both 
> the original type and its subset.
> 
> So I would like to ask here if anybody know if this is possible in Perl 6? 
> And if yes, how would I have to do it?
> 
> Thanks for your patience to follow me up to here ...

This feels a lot like a question well asked on StackOverflow, tagged with 
“perl6” .


Liz

Reply via email to