ELM CODING RULES:

- NEVER reuse a variable name as a function parameter or in an inner scope 
  if it already exists in an outer scope. Elm forbids shadowing and will 
  throw a compilation error.

- Naming convention:
  - Top-level / module-level variables: use descriptive, longer names 
    (e.g., `gameState`, `playerScore`, `renderConfig`)
  - Function parameters and local bindings: use short names 
    (e.g., `state`, `score`, `cfg`, `x`, `y`)

- When pattern matching, bind to NEW names that don't collide with any 
  existing identifier in scope:
  
  BAD:
    view model =
      case model.status of
        Active model -> ...   -- shadows the parameter above
  
  GOOD:
    view model =
      case model.status of
        Active activeModel -> ...

- If you must refer to both an outer value and a newly bound value in the 
  same expression, rename the outer one at its definition site rather than 
  trying to qualify it.

