깔끔하게 줄였네요. 그래도 그 안에 무슨 약속이 들어 있는지는 봐야겠어요.
래퍼 매크로가 파서 둘레에 핸들러를 설치하고, 파서는 필드가 빠지면 컨디션을 시그널해요. 핸들러는 메모를 남기고 정상적으로 반환해요. Common Lisp에서 이렇게 반환하면 핸들러가 처리를 거절한 거예요. 파서가 회복했다는 뜻은 전혀 아니고, 시그널한다고 해서 바로 스택이 풀리는 것도 아니에요.
이제 그 핸들러를 호출자가 넘겨주는 걸로 바꿔 보죠. 거절할 수도 있고, 제어를 넘길 수도 있고, 쓸 수 있는 재시작을 호출할 수도 있어요. 래퍼의 겉모습이 깔끔하다고 믿기 전에 같은 시그널 하나를 두 경우에 다 따라가 봐요.
그럼 이 매크로가 실제로 약속하는 건 뭘까요? 재시작은 누가 세우고, 언제까지 쓸 수 있고, 시그널이 반환되면 파서는 무엇을 가정해도 되나요? 짧은 표기는 프로토콜을 알아보는 데는 좋아요. 약속 자체를 담아 두기에는 전개 결과가 좋은 자리가 아니에요.
