# Lists carry an optional dotted tail rather than a separate improper-list variant

Every target dialect has dotted pairs / improper lists (`(a . b)`, `(a b . c)`) — AutoLISP builds association lists from them, LFE and the Lisp core rely on them. We represent this with a single `List { delim, items, tail: Option<Box<Datum>> }` variant where `tail: None` is a proper list and `tail: Some(_)` is improper, rather than a separate `DottedList` variant. This keeps one code path for "iterate a list's items and read its head" (what `cccc`'s special-form dispatch and any future serializer both want), matches `lexpr`'s cons-based internal representation, and treats a proper list as the natural special case of the general one; the type-safety benefit of a distinct variant is low because `cccc` can ignore the dotted tail entirely for complexity purposes.
