# this file was autmoatically generated by running
# perl bin/make_classes.pl --namespace AI --input ex/knock_knock.aiml > ex/aiml.pl
# 

    # AI/Aiml.pm
    package AI::Aiml;
    use Moose;
    use MooseX::AttributeHelpers;

    has 'category_collection' => (
        isa         => 'ArrayRef[AI::Aiml::Category]',
        is          => 'ro',
        metaclass   => 'Collection::Array',
        lazy        => 1,
        auto_deref  => 1,
        default     => sub { [] },
        provides    => { push => 'category' },
        description => { sort_order => 0, },
    );
    has 'version' => (
        isa         => 'Str',
        is          => 'ro',
        metaclass   => 'MooseX::MetaDescription',
        description => {
            Prefix       => "",
            LocalName    => "version",
            node_type    => "attribute",
            Name         => "version",
            NamespaceURI => "",
            sort_order   => 1,
        },
    );

    no Moose;

    # AI/Aiml/Category.pm
    package AI::Aiml::Category;
    use Moose;
    use MooseX::AttributeHelpers;

    has 'pattern_collection' => (
        isa         => 'ArrayRef[AI::Aiml::Category::Pattern]',
        is          => 'ro',
        metaclass   => 'Collection::Array',
        lazy        => 1,
        auto_deref  => 1,
        default     => sub { [] },
        provides    => { push => 'pattern' },
        description => { sort_order => 0, },
    );
    has 'template_collection' => (
        isa         => 'ArrayRef[AI::Aiml::Category::Template]',
        is          => 'ro',
        metaclass   => 'Collection::Array',
        lazy        => 1,
        auto_deref  => 1,
        default     => sub { [] },
        provides    => { push => 'template' },
        description => { sort_order => 1, },
    );
    has 'that_collection' => (
        isa         => 'ArrayRef[AI::Aiml::Category::That]',
        is          => 'ro',
        metaclass   => 'Collection::Array',
        lazy        => 1,
        auto_deref  => 1,
        default     => sub { [] },
        provides    => { push => 'that' },
        description => { sort_order => 2, },
    );

    no Moose;

    # AI/Aiml/Category/Pattern.pm
    package AI::Aiml::Category::Pattern;
    use Moose;
    use MooseX::AttributeHelpers;

    has 'text' => (
        isa         => 'Str',
        is          => 'rw',
        metaclass   => 'MooseX::MetaDescription',
        description => { sort_order => 0, },
    );

    no Moose;

    # AI/Aiml/Category/Template.pm
    package AI::Aiml::Category::Template;
    use Moose;
    use MooseX::AttributeHelpers;

    has 'random_collection' => (
        isa         => 'ArrayRef[AI::Aiml::Category::Template::Random]',
        is          => 'ro',
        metaclass   => 'Collection::Array',
        lazy        => 1,
        auto_deref  => 1,
        default     => sub { [] },
        provides    => { push => 'random' },
        description => { sort_order => 0, },
    );
    has 'text' => (
        isa         => 'Str',
        is          => 'rw',
        metaclass   => 'MooseX::MetaDescription',
        description => { sort_order => 1, },
    );

    no Moose;

    # AI/Aiml/Category/Template/Random.pm
    package AI::Aiml::Category::Template::Random;
    use Moose;
    use MooseX::AttributeHelpers;

    has 'li_collection' => (
        isa         => 'ArrayRef[AI::Aiml::Category::Template::Random::Li]',
        is          => 'ro',
        metaclass   => 'Collection::Array',
        lazy        => 1,
        auto_deref  => 1,
        default     => sub { [] },
        provides    => { push => 'li' },
        description => { sort_order => 0, },
    );

    no Moose;

    # AI/Aiml/Category/Template/Random/Li.pm
    package AI::Aiml::Category::Template::Random::Li;
    use Moose;
    use MooseX::AttributeHelpers;

    has 'srai_collection' => (
        isa       => 'ArrayRef[AI::Aiml::Category::Template::Random::Li::Srai]',
        is        => 'ro',
        metaclass => 'Collection::Array',
        lazy      => 1,
        auto_deref  => 1,
        default     => sub { [] },
        provides    => { push => 'srai' },
        description => { sort_order => 0, },
    );
    has 'text' => (
        isa         => 'Str',
        is          => 'rw',
        metaclass   => 'MooseX::MetaDescription',
        description => { sort_order => 1, },
    );

    no Moose;

    # AI/Aiml/Category/Template/Random/Li/Srai.pm
    package AI::Aiml::Category::Template::Random::Li::Srai;
    use Moose;
    use MooseX::AttributeHelpers;

    has 'text' => (
        isa         => 'Str',
        is          => 'rw',
        metaclass   => 'MooseX::MetaDescription',
        description => { sort_order => 0, },
    );

    no Moose;

    # AI/Aiml/Category/That.pm
    package AI::Aiml::Category::That;
    use Moose;
    use MooseX::AttributeHelpers;

    has 'text' => (
        isa         => 'Str',
        is          => 'rw',
        metaclass   => 'MooseX::MetaDescription',
        description => { sort_order => 0, },
    );

    no Moose;

