> 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