Contracts on parameters

14 vues
Accéder directement au premier message non lu

David Storrs

non lue,
23 mars 2020, 15:36:3923/03/2020
à Racket Users
(define/contract (foo x)
(-> boolean? any)
'ok)

(foo #t)
'ok
(foo 7)
; foo: contract violation
; expected: boolean?
; given: 7
; in: the 1st argument of
; (-> boolean? any)
; contract from: (function foo)
; blaming: top-level
; (assuming the contract is correct)
; at: readline-input:4.18
; [,bt for context]

Yup, all good.


(define/contract foo (make-parameter #f) boolean?)
(foo #t)
(foo)
#t
(foo 7)
#f


This isn't what I expected. What am I missing?

Ben Greenman

non lue,
23 mars 2020, 16:12:0623/03/2020
à David Storrs,Racket Users
1. the contract comes first, right now foo = boolean?

2. try parameter/c

Eric Griffis

non lue,
23 mars 2020, 16:13:5023/03/2020
à David Storrs,Racket Users
AFK, but it looks like the contract and function on your define/contract are swapped. Maybe the contract check on the one-arg call sets the parameter and then hilarity ensues?

Eric


--
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 racket-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/CAE8gKocV-TC1U6g5sq7C%2BZAjSVqDc%2B4yZWobr245qx4fZ9%2Bi3w%40mail.gmail.com.

David Storrs

non lue,
23 mars 2020, 16:17:3923/03/2020
à Racket Users
Thanks, that was exactly it.

On Mon, Mar 23, 2020 at 3:51 PM Michael MacLeod
<michael...@gmail.com> wrote:
>
> I think you are looking for parameter/c. See https://docs.racket-lang.org/reference/data-structure-contracts.html?q=parameterof#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._parameter%2Fc%29%29 for more information.
>
> Best,
> Michael
>
> On Mon, Mar 23, 2020, 12:36 PM David Storrs <david....@gmail.com> wrote:
>>
Répondre à tous
Répondre à l'auteur
Transférer
0 nouveau message