[racket] how to write a contract for indeterminate number of return values

From: Matthew Butterick (mb at mbtype.com)
Date: Thu Dec 18 16:07:59 EST 2014

Mostly I was curious if there were an approved way of doing this. The need
is not urgent.

I have a function that returns a list of lists, and its output contract is
(listof list?). I was making a variant of it that returned values rather
than a list (by just doing (apply values ...) to the original function
result). So I wanted to update the output contract accordingly.

On Thu, Dec 18, 2014 at 11:16 AM, Robby Findler <robby at eecs.northwestern.edu
> wrote:
> That's not currently possible. I think it would make sense to have a
> new contract combinator that supported something like that, but I'll
> note that you're kind of fighting with the "smooth" optimization paths
> in Racket when you do something like that (as compared to simply
> returning a list).
> Can you maybe give a little more context to help me understand what
> you're doing?
> Robby
> On Thu, Dec 18, 2014 at 1:02 PM, Matthew Butterick <mb at mbtype.com> wrote:
> > "If (values range-expr ...) is used as the last sub-form of ->, the
> function must produce a result for each contract, and each value must match
> its respective contract." [1]
> >
> > I understand what this means if you have a fixed number of return
> values. But how do you write an output contract for an indeterminate number
> of return values?
> >
> > Similar to how (listof type?) contract doesn't care how long the list
> is, I'm trying to write a contract that means "however many values come
> back, they all need to be integers".
> >
> >
> > [1] http://docs.racket-lang.org/reference/function-contracts.html
> > ____________________
> >   Racket Users list:
> >   http://lists.racket-lang.org/users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20141218/8b51f174/attachment.html>

Posted on the users mailing list.