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
  • 13,753
  • 17
  • 64
  • 93

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,983
  • 1
  • 21
  • 43