Here's an example:

#lang racket

(define (make-final-struct-type name count)
  (define-values (type constructor predicate accessor mutator)
    (make-struct-type name #f count 0))
  (values (chaperone-struct-type type (λ _ (error 'fail1))
                                 (λ _ (error 'fail2))
                                 (λ _ (error 'fail3)))
          constructor predicate accessor mutator))

(define-values (struct:x make-x x? x-ref x-set!)
  (make-final-struct-type 'x 2))

(define-values (struct:y make-y y? y-ref y-set!)
  (make-struct-type 'y struct:x 0 0))

(make-x 0 0)
(make-y 0 0)

Sam

On Fri, Nov 4, 2016 at 4:54 PM, Sam Tobin-Hochstadt
<[email protected]> wrote:
> Look at `chaperone-struct-type`:
> http://docs.racket-lang.org/reference/chaperones.html?q=chaperone-struct-type#%28def._%28%28quote._~23~25kernel%29._chaperone-struct-type%29%29
>
> You can just have the guard always error.
>
> Sam
>
> On Fri, Nov 4, 2016 at 4:49 PM, Alex Knauth <[email protected]> wrote:
>>
>>> On Nov 4, 2016, at 4:43 PM, Sam Tobin-Hochstadt <[email protected]> 
>>> wrote:
>>>
>>> Typed Racket chaperones the struct type to prevent further extension.
>>
>> Ok, thanks. Where would I go to see how I would create a chaperone like this?
>>
>>> Sam
>>>
>>> On Fri, Nov 4, 2016 at 4:29 PM, Alex Knauth <[email protected]> wrote:
>>>> Hello,
>>>>
>>>> Is there a way to enforce that a particular struct is final, in other 
>>>> words, that no one can declare a sub-struct of it?
>>>>
>>>> (struct foo (a b c) #:final)
>>>>
>>>> (struct bar foo (d e f))
>>>> ; should produce a syntax error similar to:
>>>> ; struct: cannot inherit from the final struct foo
>>>>
>>>> (make-struct-type 'bar struct:foo 3 0)
>>>> ; should produce an error at runtime:
>>>> ; make-struct-type: cannot inherit from the final struct foo
>>>>
>>>> Does struct have a feature like this? If I'm remembering correctly, Typed 
>>>> Racket does something to make sure that untyped structs can't inherit from 
>>>> typed structs. What does Typed Racket do to do do that?
>>>>
>>>> Alex Knauth
>>>>
>>>> --
>>>> 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.

-- 
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