See
https://docs.perl6.org/type/Signature#Constraining_defined_and_undefined_values

If I say "my Int $x",
$x is now an Int, but an undefined Int.

If I say "my Int $x = 42",
$x is an Int, but set to a defined value, 42.

Both are Int:

say  42 ~~ Int;   # OUTPUT: «True␤»
say Int ~~ Int;   # OUTPUT: «True␤»


There are three type constraint suffixes you can add -- :D (defined), :U
(undefined) or :_ (defined or undefined)

# Checking a type object
say Int ~~ Any:D;    # OUTPUT: «False␤»
say Int ~~ Any:U;    # OUTPUT: «True␤»
say Int ~~ Any:_;    # OUTPUT: «True␤»

# Checking an object instance
say 42 ~~ Any:D;     # OUTPUT: «True␤»
say 42 ~~ Any:U;     # OUTPUT: «False␤»
say 42 ~~ Any:_;     # OUTPUT: «True␤»



On Fri, Sep 14, 2018 at 7:08 AM Todd Chester <toddandma...@zoho.com> wrote:

>
>
> On 09/14/2018 04:01 AM, Simon Proctor wrote:
> > :D is a type constraint requiring an instantiated (or defined) object of
> > the given type (or a subtype of it).
> >
> > :U is a type constraint saying you have a container specified for the
> > given type that hasn't been instantiated.
>
> Hi Simon,
>
> Your went over my head.  What the heck is "instantiated"?
>
> https://www.dictionary.com/browse/instantiate
> verb (used with object), in·stan·ti·at·ed, in·stan·ti·at·ing.
>
>      to provide an instance of or concrete evidence in support
>      of (a theory, concept, claim, or the like).
>
> I am not connecting the dots.
>
> Is there a list of these guys somewhere, or are these the only two?
>
> -T
>

Reply via email to