return x + 2
I think a separate problem is that usually when I read code, I’m not thinking “well this code might just not work at all” because 1. It’s just not my prior, and 2. It seems a bit rude to start from such an oppositional position to someone else’s code. Instead I’ll try to assume that it works and work out why it works. This is especially true for code written in languages I’m unfamiliar with. I remember enjoying this especially before I learned any haskell when the haskell blogposts were frequent on HN. But this position puts me at odds with the study where for many examples you are supposed to guess Error whereas I want to figure out what assumptions make it not an error, then which is most reasonable, then what results those assumptions would imply. But maybe my expectations of how a programming language behaves wouldn’t be so useful for designing languages as I already have pretty strong expectations for this.
 perhaps I just disagree about the definition of dynamic scoping here.