These are defined in a separate module only due to TemplateHaskell
stage restrictions - expressions defined in the current module can't
be passed to splices. So we have to either parameters/repeat each
parameter definition multiple times, or separate them into this
module.

Disk changes type for OpInstanceRecreateDisks. This is a bit
strange, because the type in Python is something like Either
[DiskIndex] [DiskChanges], but we can't represent the type of an
empty list in JSON, so we have to add a custom case for the empty
list.

Custom type for target_node parameter of OpBackupExport, which
varies depending on mode. FIXME: this uses an [JSValue] since
we don't care about individual rows (just like the Python code
tests). But the proper type could be parsed if we wanted.