Каждый файл может содержать несколько классов, перечислений и импортов. Все они - части пакета, декларированного в начале файла. Если package не декларирован, используется пустой пакет по умолчанию. Поэтому у каждого типа есть путь ссылающийся на название пакета за которым следует имя типа.
Этот файл объявляет два типа: my.pack.E и my.pack.C. Можно хранить несколько классов в одном файле, но тип должен быть уникальным для всего приложения, так что вероятность конфликтов возрастает, если вы не используете пакеты (это не означает, что вы должны использовать длинные названия пакетов повсюду).
При использовании пакетов, ваши файлы должны быть помещены в подкаталоги, имеющие такие-же названия. Обычно название файла это имя одного из главных классов, определённых в нём.
Расширение файлов для haXe - .hx.
===== Импорт =====
Импорт используется, чтобы иметь доступ ко всем типам в файле без необходимости указывать имя пакета.
Идентично следующему :
Единственная разница в том, что при использовании import вы можете использовать конструкторы перечислений (enum), которые были декларированы в файле my/pack/C.hx.
===== Поиск типа =====
Когда компилятор встречает имя типа, поиск его определения производится в следующем порядке:
* параметры типа текущего класса
* стандартные типы
* типы декларированные в текущем файле
* типы декларированные в импортированных файлах (если пакет, в котором идёт поиск пуст)
* в случае неудачи, загружается соответствующий файл и поиск осуществляется в нём.
===== Конструкторы перечислений =====
Для использования конструкторов перечислений, файл в котором enum объявлен, должен сначала быть импортирован, либо вы можете использовать полный путь для доступа к конструкторам, как если бы они были статическими полями типа enum.
Как исключение при использвании в switch, если тип перечисления известен во время компиляции, можно использовать конструкторы в case без необходимости импортирования.