Maybe this line:

https://github.com/racket/racket/blob/master/racket/collects/racket/contract/private/parametric.rkt#L105

should be:

   #:first-order (λ (c) (if (barrier-contract-positive? c)
(barrier-contract-pred c) (λ (x) #t)))

?

Robby


On Tue, Nov 28, 2017 at 8:02 PM, Ben Greenman
<[email protected]> wrote:
> The other day, I wanted to write a contract for a function that takes
> any kind of vector and does something depending on whether the vector
> is mutable. The contract was basically the one below:
>
> ```
> #lang racket
>
> (define/contract (f v)
>   (parametric->/c [A]
>     (-> (or/c (vectorof A #:immutable #true)
>               (vectorof A #:immutable #false))
>         any))
>   (void))
> ```
>
> When I try to call this function, I get an error "none of the branches
> of the or/c matched".
>
> It looks like this error is because `contract-first-order-passes?`
> returns #false if the vector I pass to `f` has any elements.
>
> Two questions:
>
> 1. Could `(contract-first-order-passes? ctc val)` return `#true` if
> `ctc` is from a `parametric->/c` ? (I feel like it shouldn't but I
> don't know why not)
>
> 2. If not, would `or/c` be better off using a
> `contract-first-order-fails?` predicate?
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to