I was playing around with something similar to the OP and encountered this same problem using s/spec recursively. Yes, I get it that there are work-arounds, but it seems like this is a legitimate issue. s/spec as you say resolves at definition time, but the rest of the combinators (s/alt, s/and, s/keys, etc.) as far as I can tell are late binding. What's the rationale for s/spec behaving differently? If specs happen to get redefined later this could further complicate matters as everything defined with s/spec will reference the older spec. Why not just make s/spec late binding too and then there would be no such issue with recursive specs?