#lang racket

(module server racket
  (provide
   (contract-out
    (fish%
     (class/c
      (update (->m degrees-of-freshness any/c))
      (field [freshness degrees-of-freshness])))))

  (define degrees-of-freshness
    (one-of/c 'fresh 'frozen 'edible 'rotten))
  
  (define fish%
    (class object%
      (super-new)
      (field [freshness 'fresh])

      ;; set this object's freshness field to v
      (define/public (update v) (set! freshness v)))))

(module client racket
  (require (submod ".." server))

  (define fish (new fish%))

  (send fish update 'edible)

  ;; blow up if exn raised isn't contract failure 
  (with-handlers ([exn:fail:contract? void])
    (send fish update 'done)
    (raise 'catastrophe)))

(require 'client)
        


On Jun 21, 2015, at 5:41 AM, Aidan Gauland wrote:

> Say I want to define a flat contract for the "freshness" field of my
> fish class, so I define a contract for it like so:
> 
> (define/contract fish-freshness/c
>  (-> any/c
>      boolean?)
>  (flat-named-contract 'fish-freshness/c
>    (lambda (x)
>      (not (eq? #f (member x '(fresh frozen edible rotten)))))))
> 
> Am I barking up the wrong tree here, or is this perfectly sensible?
> 
> Regards,
> Aidan Gauland
> 
> -- 
> 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+unsubscr...@googlegroups.com.
> 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 racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to