# ???
class AST
class ObjAt
class Dummy
class Version

# Metamodel
class Perl6::Metamodel::Archetypes
role  Perl6::Metamodel::AttributeContainer
role  Perl6::Metamodel::BUILDPLAN
role  Perl6::Metamodel::BaseType
role  Perl6::Metamodel::BoolificationProtocol
role  Perl6::Metamodel::C3MRO
class Perl6::Metamodel::ClassHOW         does Perl6::Metamodel::Naming does Perl6::Metamodel::Documenting does Perl6::Metamodel::Versioning does Perl6::Metamodel::Stashing does Perl6::Metamodel::AttributeContainer does Perl6::Metamodel::MethodContainer does Perl6::Metamodel::PrivateMethodContainer does Perl6::Metamodel::MultiMethodContainer does Perl6::Metamodel::RoleContainer does Perl6::Metamodel::MultipleInheritance does Perl6::Metamodel::DefaultParent does Perl6::Metamodel::C3MRO does Perl6::Metamodel::MROBasedMethodDispatch does Perl6::Metamodel::MROBasedTypeChecking does Perl6::Metamodel::Trusting does Perl6::Metamodel::BUILDPLAN does Perl6::Metamodel::Mixins does Perl6::Metamodel::BoolificationProtocol does Perl6::Metamodel::ParrotInterop
class Perl6::Metamodel::ConcreteRoleHOW  does Perl6::Metamodel::Naming does Perl6::Metamodel::Versioning does Perl6::Metamodel::PrivateMethodContainer does Perl6::Metamodel::MethodContainer does Perl6::Metamodel::MultiMethodContainer does Perl6::Metamodel::AttributeContainer does Perl6::Metamodel::RoleContainer does Perl6::Metamodel::MultipleInheritance
class Perl6::Metamodel::ContainerDescriptor
class Perl6::Metamodel::CurriedRoleHOW   does Perl6::Metamodel::RolePunning does Perl6::Metamodel::TypePretense
role  Perl6::Metamodel::DefaultParent
class Perl6::Metamodel::BaseDispatcher
class Perl6::Metamodel::MethodDispatcher is Perl6::Metamodel::BaseDispatcher
class Perl6::Metamodel::MultiDispatcher  is Perl6::Metamodel::BaseDispatcher
class Perl6::Metamodel::WrapDispatcher   is Perl6::Metamodel::BaseDispatcher
role  Perl6::Metamodel::Documenting
class Perl6::Metamodel::EnumHOW          does Perl6::Metamodel::Naming does Perl6::Metamodel::Stashing does Perl6::Metamodel::AttributeContainer does Perl6::Metamodel::MethodContainer does Perl6::Metamodel::MultiMethodContainer does Perl6::Metamodel::RoleContainer does Perl6::Metamodel::BaseType does Perl6::Metamodel::MROBasedMethodDispatch does Perl6::Metamodel::MROBasedTypeChecking does Perl6::Metamodel::BUILDPLAN does Perl6::Metamodel::BoolificationProtocol does Perl6::Metamodel::ParrotInterop
class Perl6::Metamodel::GenericHOW       does Perl6::Metamodel::Naming
class Perl6::Metamodel::GrammarHOW       is Perl6::Metamodel::ClassHOW does Perl6::Metamodel::DefaultParent
role  Perl6::Metamodel::MROBasedMethodDispatch
role  Perl6::Metamodel::MROBasedTypeChecking
role  Perl6::Metamodel::MethodContainer
role  Perl6::Metamodel::MethodDelegation
role  Perl6::Metamodel::Mixins
class Perl6::Metamodel::ModuleHOW        does Perl6::Metamodel::Naming does Perl6::Metamodel::Documenting does Perl6::Metamodel::Versioning does Perl6::Metamodel::Stashing does Perl6::Metamodel::TypePretense does Perl6::Metamodel::MethodDelegation
role  Perl6::Metamodel::MultiMethodContainer
role  Perl6::Metamodel::MultipleInheritance
role  Perl6::Metamodel::Naming
class Perl6::Metamodel::NativeHOW        does Perl6::Metamodel::Naming does Perl6::Metamodel::Documenting does Perl6::Metamodel::Versioning does Perl6::Metamodel::Stashing does Perl6::Metamodel::MultipleInheritance does Perl6::Metamodel::C3MRO does Perl6::Metamodel::MROBasedMethodDispatch does Perl6::Metamodel::MROBasedTypeChecking
class Perl6::Metamodel::PackageHOW       does Perl6::Metamodel::Naming does Perl6::Metamodel::Documenting does Perl6::Metamodel::Stashing does Perl6::Metamodel::TypePretense does Perl6::Metamodel::MethodDelegation
class Perl6::Metamodel::ParametricRoleGroupHOW does Perl6::Metamodel::Naming does Perl6::Metamodel::Stashing does Perl6::Metamodel::TypePretense does Perl6::Metamodel::RolePunning does Perl6::Metamodel::BoolificationProtocol
class Perl6::Metamodel::ParametricRoleHOW does Perl6::Metamodel::Naming does Perl6::Metamodel::Documenting does Perl6::Metamodel::Versioning does Perl6::Metamodel::MethodContainer does Perl6::Metamodel::PrivateMethodContainer does Perl6::Metamodel::MultiMethodContainer does Perl6::Metamodel::AttributeContainer does Perl6::Metamodel::RoleContainer does Perl6::Metamodel::MultipleInheritance does Perl6::Metamodel::Stashing does Perl6::Metamodel::TypePretense does Perl6::Metamodel::RolePunning
role  Perl6::Metamodel::ParrotInterop
role  Perl6::Metamodel::PrivateMethodContainer
role  Perl6::Metamodel::RoleContainer
role  Perl6::Metamodel::RolePunning
role  Perl6::Metamodel::Stashing
class Perl6::Metamodel::StaticLexPad
class Perl6::Metamodel::SubsetHOW        does Perl6::Metamodel::Naming does Perl6::Metamodel::Documenting
role  Perl6::Metamodel::Trusting
role  Perl6::Metamodel::TypePretense
role  Perl6::Metamodel::Versioning

# Attributes
class Attribute

# Base types
class Mu
class Junction                      is Mu
class Any                           is Mu
class Scalar                        is Any
class Proxy                         is Any
class LazyScalar                    is Proxy
class Cool                          is Any
class Bool                          is Cool

# Callables
role  Callable[::T = Mu]
class Code                                         does Callable
class Block                         is Code
class Routine                       is Block
class Sub                           is Routine
class Method                        is Routine
class Submethod                     is Routine
class Macro                         is Routine

class Whatever
class WhateverCode                  is Code

class CallFrame
class Parameter
class Signature

# Regex and Grammars
class Match                         is Capture is Cool
class Cursor
class Grammar                       is Cursor
class Regex                         is Method

# Strings
role  Stringy
class Str                           is Cool        does Stringy

# Numbers
role  Numeric
role  Real                                         does Numeric
class Int                           is Cool        does Real
class Num                           is Cool        does Real
class Complex                       is Cool        does Numeric

role  Rational[::NuT, ::DeT]                       does Real
class Rat                           is Cool        does Rational[Int, Int]
class FatRat                        is Cool        does Rational[Int, Int]

# Time
role  Dateish
class DateTime-local-timezone                      does Callable
class DateTime                                     does Dateish
class Date                                         does Dateish
class Duration                      is Cool        does Real
class Instant                       is Cool        does Real

# IO
role  IO::FileTestable
class IO                                           does IO::FileTestable
class IO::Path                      is Cool        does IO::FileTestable
class IO::ArgFiles                  is IO
role  IO::Socket
class IO::Socket::INET                             does IO::Socket

# Pod
class Pod::Config
class Pod::Block
class Pod::Block::Code              is Pod::Block
class Pod::Block::Comment           is Pod::Block
class Pod::Block::Declarator        is Pod::Block
class Pod::Block::Named             is Pod::Block
class Pod::Block::Para              is Pod::Block
class Pod::Block::Table             is Pod::Block
class Pod::FormattingCode           is Pod::Block
class Pod::Heading                  is Pod::Block
class Pod::Item                     is Pod::Block


### COLLECTIONS

# Collections: Iteration
class Iterable                      is Cool
class Iterator                      is Iterable
class Nil                           is Iterator
class GatherIter                    is Iterator
class ListIter                      is Iterator
class MapIter                       is Iterator

# Collections: Positional
role  Positional[::T = Mu]
class Buf                                          does Positional
class Capture
class Parcel                        is Cool        does Positional
class Range                         is Iterable    does Positional
class List                          is Iterable    does Positional
class Array                         is List
class LoL                           is List
role  TypedArray[::TValue]                         does Positional[TValue]

# Collections: Associative
role  Associative[::T = Mu]
role  Baggy
class Bag                           is Iterable    does Associative does Baggy
class KeyBag                                       does Associative does Baggy
class Set                           is Iterable    does Associative
class KeySet                        is Iterable    does Associative
role  Enumeration
role  NumericEnumeration
role  StringyEnumeration
class Enum                                         does Associative
class Pair                          is Enum
class EnumMap                       is Iterable    does Associative
class Stash                         is Hash
class PseudoStash                   is EnumMap
class Hash                          is EnumMap
class KeyHash                       is Iterable    does Associative
role  TypedHash[::TValue]                          does Associative[TValue]
role  TypedHash[::TValue, ::TKey]                  does Associative[TValue]


### EXCEPTIONS

# Exceptions: Base
class Failure
class Exception
class Backtrace                     is List
class Backtrace::Frame

# Exceptions: Misc
class X::AdHoc                      is Exception
class X::Method::NotFound           is Exception
class X::Method::InvalidQualifier   is Exception
class X::OutOfRange                 is Exception
class X::Routine::Unwrap            is Exception
class X::Constructor::Positional    is Exception
class X::Hash::Store::OddNumber     is Exception
class X::Phaser::PrePost            is Exception
class X::Sequence::Deduction        is Exception
class X::Assignment::RO             is Exception
class X::NoDispatcher               is Exception
class X::Localizer::NoContainer     is Exception
class X::Inheritance::Unsupported   is Exception
class X::HyperOp::NonDWIM           is Exception
class X::Set::Coerce                is Exception
class X::Eval::NoSuchLang           is Exception

# Exceptions: Numbers
class X::Numeric::Real              is Exception

# Exceptions: Strings
class X::Str::Numeric               is Exception
class X::Str::Match::x              is Exception
class X::Str::Trans::IllegalKey     is Exception
class X::Str::Trans::InvalidArg     is Exception

# Exceptions: Buffers
class X::Buf::AsStr                 is Exception
class X::Buf::Pack                  is Exception
class X::Buf::Pack::NonASCII        is Exception

# Exceptions: Time
class X::Temporal                   is Exception
class X::Temporal::InvalidFormat    is X::Temporal
class X::Temporal::Truncation       is X::Temporal
class X::DateTime::TimezoneClash    is X::Temporal

# Exceptions: Composition
class X::Export::NameClash          is Exception
class X::Import::MissingSymbols     is Exception
class X::Composition::NotComposable is Exception
class X::Mixin::NotComposable       is Exception

# Exceptions: Type Checks
class X::TypeCheck                  is Exception
class X::TypeCheck::Binding         is X::TypeCheck
class X::TypeCheck::Return          is X::TypeCheck
class X::TypeCheck::Assignment      is X::TypeCheck

# Exceptions: Control Flow
class X::ControlFlow                is Exception
class X::ControlFlow::Return        is X::ControlFlow

# Exceptions: IO
role  X::OS
role  X::IO                                        does X::OS
class X::IO::Rename                 is Exception   does X::IO
class X::IO::Copy                   is Exception   does X::IO
class X::IO::Mkdir                  is Exception   does X::IO
class X::IO::Chdir                  is Exception   does X::IO
class X::IO::Dir                    is Exception   does X::IO
class X::IO::Cwd                    is Exception   does X::IO
class X::IO::Rmdir                  is Exception   does X::IO
class X::IO::Unlink                 is Exception   does X::IO
class X::IO::Chmod                  is Exception   does X::IO

# Exceptions: Compile-Time
role  X::Comp                       is Exception
class X::Comp::AdHoc                is X::AdHoc    does X::Comp
class X::NYI                        is Exception
class X::Comp::NYI                  is X::NYI      does X::Comp

class X::Signature::Placeholder                    does X::Comp
class X::Placeholder::Block                        does X::Comp
class X::Placeholder::Mainline      is X::Placeholder::Block
class X::Attribute::Undeclared      is X::Undeclared
class X::Redeclaration                             does X::Comp
class X::Undeclared                                does X::Comp
class X::Phaser::Multiple                          does X::Comp
class X::Obsolete                                  does X::Comp
class X::Parameter::Default                        does X::Comp
class X::Parameter::Placeholder                    does X::Comp
class X::Parameter::Twigil                         does X::Comp
class X::Parameter::MultipleTypeConstraints        does X::Comp
class X::Parameter::WrongOrder                     does X::Comp
class X::Signature::NameClash                      does X::Comp
class X::Method::Private::Permission               does X::Comp
class X::Method::Private::Unqualified              does X::Comp
class X::Bind                       is Exception
class X::Bind::NativeType                          does X::Comp
class X::Bind::Slice                is Exception
class X::Bind::ZenSlice             is X::Bind::Slice
class X::Does::TypeObject           is Exception
class X::Role::Initialization       is Exception
class X::Value::Dynamic                            does X::Comp
class X::Attribute::Package                        does X::Comp
class X::Attribute::NoPackage                      does X::Comp
class X::Declaration::Scope                        does X::Comp
class X::Declaration::Scope::Multi  is X::Declaration::Scope
class X::Anon::Multi                               does X::Comp
class X::Anon::Augment                             does X::Comp
class X::Augment::NoSuchType                       does X::Comp
class X::Package::Stubbed                          does X::Comp

# Exceptions: Syntax
role  X::Pod
role  X::Syntax                                    does X::Comp
class X::Syntax::Name::Null                        does X::Syntax
class X::Syntax::UnlessElse                        does X::Syntax
class X::Syntax::Reserved                          does X::Syntax
class X::Syntax::P5                                does X::Syntax
class X::Syntax::NegatedPair                       does X::Syntax
class X::Syntax::Variable::Numeric                 does X::Syntax
class X::Syntax::Variable::Match                   does X::Syntax
class X::Syntax::Variable::Twigil                  does X::Syntax
class X::Syntax::Variable::IndirectDeclaration     does X::Syntax
class X::Syntax::Augment::WithoutMonkeyTyping      does X::Syntax
class X::Syntax::Augment::Role                     does X::Syntax
class X::Syntax::Comment::Embedded                 does X::Syntax
class X::Syntax::Confused                          does X::Syntax
class X::Syntax::Malformed                         does X::Syntax
class X::Syntax::Missing                           does X::Syntax
class X::Syntax::SigilWithoutName                  does X::Syntax
class X::Syntax::Self::WithoutObject               does X::Syntax
class X::Syntax::VirtualCall                       does X::Syntax
class X::Syntax::NoSelf                            does X::Syntax
class X::Syntax::Number::RadixOutOfRange           does X::Syntax
class X::Syntax::Regex::Adverb                     does X::Syntax
class X::Syntax::Signature::InvocantMarker         does X::Syntax
class X::Syntax::Extension::Category               does X::Syntax
class X::Syntax::InfixInTermPosition               does X::Syntax
class X::Syntax::Pod::BeginWithoutIdentifier       does X::Syntax does X::Pod
class X::Syntax::Pod::BeginWithoutEnd              does X::Syntax does X::Pod
