5

I like how you can retain representation in transparent structs:

(struct posn (x y)
        #:transparent)

> (posn 1 2)
(posn 1 2)

But is there a way to customize it? Like in Python?

Community
  • 1
  • 1
Vladimir Keleshev
  • 12,485
  • 16
  • 62
  • 92

1 Answers1

8

Check out the prop:custom-write property here. Here's a simple implementation:

(struct pr (x y)
  #:transparent
  #:property prop:custom-write (λ (v p w?)
                                 (fprintf p "<~a,~a>" (pr-x v) (pr-y v))))

> (pr 1 2)
<1,2>

Note that this works with non-#:transparent structures as well.

Sam Tobin-Hochstadt
  • 4,883
  • 1
  • 20
  • 43