We should be able to provide a cats.Defer instance - this would enable usage of Defer[Schema].fix, which would be convenient for recursion (no lazy val, a little harder to mess up).
Edit: of course I didn't check it all the way through, recursive is exactly like fix. Still think the instance might be helpful, though.
Also, Invariant[Schema].