Как вы указали, типы не нужно указывать явно.Следовательно, понятие типов в спецификации языка в значительной степени отсутствует.
Существуют некоторые языки, - вспоминается Typed Racket, - которые строят типизированный язык поверх (того, что раньше было) Scheme, и этиязыки определяют свои собственные типы.
Существуют также системы контрактов, которые присваивают имена классам значений.Опять же, я могу указать на Ракет в качестве примера этого, но я уверен, что есть похожие системы.
Если не говорить более конкретно, то нет общего ответа на ваш вопрос.
Термин «атомарный» обычно используется для обозначения значений, которые не являются «составными данными»;то есть значения, которые не содержат других значений.Список определенно не атомарный, а символ.