> On 31 May 2017, at 12:25, cle-pe...@qiao.in-berlin.de wrote:
> 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