Hi Robert, Robert Vollmert writes: > Hi Timothy, > > thanks for the detailed feedback, this is very helpful! You’re welcome! > I’ve sent an updated patch addressing some of the concerns, but have > some questions regarding others. (I just realized that the documentation > updates probably anticipate multiple return values.) Yes. >> On 13. Jun 2019, at 04:28, Timothy Sample wrote: >>> + (let-values (((port get-hash) (open-sha256-input-port port))) > >>> + (cons >>> + (read-cabal (canonical-newline-port port)) >>> + (bytevector->nix-base32-string (get-hash))))) > > […] > >> Also, I think returning multiple values would be more natural here >> (i.e., replace “cons” with “values”). > > I tried building it that way to begin with, but I’m having issues > making it work (nicely, or maybe at all). I think it comes down to > later functions optionally failing with a single #f-value. Judging > by the lack of infrastructure, I imagine functions that return different > numbers of values are not idiomatic scheme. Should this be changed to > return two values (#f #f) on failure? Or to raise an exception and > handle it higher up when we want to ignore a failure? > > Currently, implementing this with values/let-values results in me > doing more or less a combination of let-values and match, at which > point it seems that any potential benefits of using multiple values > as opposed to a pair/list are lost. (There’s no match-values form is > there?) I’m not sure I understand the problem. Here’s what I had in mind: