varies() fails if it contains a functional variable varied over a set (either opened or closed) of functions.
The reason for that is the way Nemerle implements using method names as functional values. For each method name used as functional value, a class is created, one class per method in which such usage occurs. So, if method uses are inside the same method, everything works; otherwise, it does not.
The solution of this problem requires finding a correct way to compare two functional values for equality in this case. It may be possible (though we are not sure) that it could be done by comparing their byte codes.