Lang_narrow is a programming language that implements flow typing with structural union and record types, allowing the type system to automatically narrow union types based on control flow branches. Unlike algebraic data types in languages like Haskell or Rust, lang_narrow's union types are structural rather than nominal, enabling flexible type inclusion and exclusion without exhaustive case handling. The language is motivated by improving ergonomics in handling discriminated unions and enabling type-safe early returns.