Skip to content

def X := with multi-key layout body fails to parse; identical body without := works #80

Description

@hierophantos

Repro (A/B, byte-identical bodies — verified at 2b1b383d)

ns repro

def r1 :=
  :eu {:host "eu.example.com" :port 443}
  :us {:host "us.example.com" :port 443}
;; => ERROR: Could not infer type

def r2
  :eu {:host "eu.example.com" :port 443}
  :us {:host "us.example.com" :port 443}
;; => r2 : {:eu {:host String :port Int} :us {:host String :port Int}} defined.

The only difference is the := on the def head. The implicit-map form
(def r2, no :=) elaborates the identical layout body to a fully-typed
nested row; the := form fails.

Trigger shape

Fiddly, which itself suggests a defect rather than a documented restriction:

  • def X := + a layout body with >= 2 top-level keys fails
  • def X := + >= 2 dash items where one carries a multi-line @[...] fails
  • single-line := bodies (def X := {:a 1}) work
  • the same multi-key layout body under def X (no :=) works

Diagnosis notes

  • The diagnostic — Could not infer type — names the wrong subsystem; this is
    a parse/layout seam (the body's keys are apparently not being folded into a
    map literal under the := head), not a typing failure.
  • Adjacent history: the implicit-map def WS path was touched in the
    2026-07-18 hand-testing arc (ff31d237, process-string-ws parity), so this
    seam has moved recently.
  • Found while running the Path Selection spec's Appendix fixtures
    (4 of its def X := forms hit this). Workaround used in corpus files:
    the def X implicit-map form.

Filed from the CIU T6 Path Selection D5 critique (2026-07-28); also recorded
in docs/tracking/DEFERRED.md.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions