No principle objections.
But note that flipMerger is the same as swapMerge and we should have
only one of them (I don't care where it lives and how it is named).
Also, I am missing haddocks and properties for the new functions. E.g.
is your instance Merge RL equivalent to first reversing both sequences
and then re-reversing the result? (I think so)
As a last remark, I always felt the "natural" equivalent operation for
RLs should rather be
unmerge :: RL (p :/\: p) wX wY -> RL (p :/\: p) wX wY
The reason is laziness: Merging is a total function and thus the result
can be consumed lazily. But your definition (I believe this is true for
any definition) for RL does not allow that, I think. Whereas unmerge is
naturally lazy for RLs.
|