# Type detection

Raku is a dynamic language that has gradual, duck typing. It provides introspection methods through its comprehensive MOP (Meta Object Protocol) making it easy to do type detection, subroutine signatures and multi-dispatch. Raku types have two general flavors: content types and container types. Different container types have varying restrictions on what sort of content they can contain and in return provide specialized methods to operate on those contents. Content types give the compiler hints on how to best handle the information, what storage requirements it may have, what operators will work with it, etc.

This is really a very broad and kind of hand-wavey overview of Raku types. For much more in-depth coverage see: <https://docs.raku.org/type.html>

```perl
sub type ($t) { say $t.raku, "\tis type: ", $t.WHAT }

# some content types
.&type for 1, 2.0, 3e0, 4i, π, Inf, NaN, 'String';

# some primitive container types
.&type for $, [ ], @, { }, %, (5 .. 7), (8 ... 10), /0/, {;}, sub {}, ( );

# undefined things
.&type for Any, Nil;

# user defined types
class my-type { };

my my-type $object;

$object.&type;
```

#### Output:

```
1       is type: (Int)
2.0     is type: (Rat)
3e0     is type: (Num)
<0+4i>  is type: (Complex)
3.14159265358979e0      is type: (Num)
Inf     is type: (Num)
NaN     is type: (Num)
"String"        is type: (Str)
Any     is type: (Any)
$[]     is type: (Array)
$[]     is type: (Array)
{}      is type: (Hash)
{}      is type: (Hash)
5..7    is type: (Range)
(8, 9, 10).Seq  is type: (Seq)
/0/     is type: (Regex)
-> ;; $_? is raw { #`(Block|61385680) ... }     is type: (Block)
sub () { #`(Sub|62948936) ... } is type: (Sub)
$()     is type: (List)
Any     is type: (Any)
Nil     is type: Nil
my-type is type: (my-type)
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://trizen.gitbook.io/perl6-rosettacode/programming_tasks/t/type_detection.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
