February 10, 2026
Type wars, repost scars
Parse, Don't Validate (2019)
Old-school safety vs quick-and-dirty checks — devs argue as repost police and Python data folks pile in
TLDR: A revived post says to transform messy input into safe, structured data up front, not just “check it.” The comments split between “old-school wisdom we forgot,” repost-police snark, and practical Python debates about spreadsheets—showing why this matters for fewer bugs and clearer data pipelines.
The 2019 slogan “Parse, don’t validate” is back on everyone’s feeds, and the comments lit up like it’s a family reunion where grandpa’s “I told you so” meets TikTok energy. Fans say it’s simple: instead of just checking if messy data looks okay, you convert it into a safe, structured shape up front so the rest of your code can relax. Think: don’t just peek at the box—open it, sort it, and label it, then move on.
But the community drama? Delicious. One veteran grumbled that this is ancient wisdom being rediscovered, basically asking if the internet took a long nap after Java and dynamic languages got trendy. The repost police arrived, pointing to the HN “past” link with siren emojis in spirit. A counter-wave shouted back, “Each repost is worth it,” linking deep-interface guru John Ousterhout’s talk here and a Haskell lightning talk here. Even Python folks chimed in with real-world angst: should you pass around giant spreadsheets (Pandas DataFrames) or actually turn each row into a clear, well-labeled object? The thread turned into a group therapy session for data teams.
Humor flew too: “Pandas aren’t just cute bears; they also break my code.” Memes aside, the vibe is clear—whether you write rigid code or flexible scripts, parse early is the new (old) mantra, and everyone’s claiming it for their team.
Key Points
- •The article introduces “Parse, don’t validate” as a concise expression of type-driven design.
- •Static type systems can determine whether a function is possible to implement.
- •In Haskell, a function of type Integer -> Void is impossible because Void has no values.
- •The standard head :: [a] -> a is partial; the compiler warns about non-exhaustive patterns for empty lists.
- •Using Maybe (head :: [a] -> Maybe a) makes the function total but imposes handling of Nothing on consumers.