It is true that you cannot curry a secret key to box. But should you ever reuse the same secret key for different clients? I thought keypair generates only pairs of keys for a reason. If yes, I'm OK with transposing these two arguments.

Note that your signature allows to curry the nonce in:
```
utop # let x sk pk ~nonce = ();;
val x : 'a -> 'b -> nonce:'c -> unit = <fun>
utop # x ~nonce:1 ();;
- : '_a -> unit = <fun>
```

As mentioned elsewhere, I think that placing the nonce always as the last argument would fix this.

I didn't like how the old signature reordered arguments in an apparently odd way compared to the C API (it's not really a strong argument, I just didn't see a compelling reason--what you say about nonces is quite compelling, for example), and I also didn't like how nonce was the only labelled argument and not optional at that. I now see that you've attempted to disallow currying it in, but as I've shown, that didn't work anyway.