Writing a spec to know whether either is a valid form is trivial; this said, once I know that it’s either one or the other, I need to handle both in code.
So I was thinking that maybe s/conform was what I was looking for: a way to reduce one form to the other, so that my code only has to deal with a canonical, spec-validated input form. But how do I do this? or is it the wrong tool for the job?
Now call conform and it will return you the tag of the or that matched. So you know if you have a case of the first or the second.
Create a function that converts one to the other. When conform says the data is of the other tag you expect, then convert it with your conversion function.
Edit: realized that the keyword is also different (::signed-up vs ::sign-on). The same technique will also work, but you’ll have to dispatch on the type of the outer map.