Calling this a compiler issue is premature I realize. It looks like wrapping proc parameters and return values in parentheses makes a difference to the error messages produced and that `uncurry` proc actually being returned and not just created and destroyed inside the `uncurry` function.
`nim check` also produces useful error messages with the parentheses in place.