I have a struct defined as:
(struct ugen sc.unit (name rate inputs) 
  #:methods gen:custom-write
  [(define write-proc
     (make-constructor-style-printer
      [λ (x) (let [(rate (ugen-rate x))
                   (name (symbol-append (ugen-name x) ':))]
               (cond [(eq? rate 'ar) name]
                     [else (symbol-append
                            name rate)]))]
      [λ (x) (ugen-inputs x)]))] #:transparent)

So that (ugen 'sinosc 'ar (1 2)) prints as (sinosc: 1 2), which 
incidentally it's the same as the function call that creates that value, 
that is: (sinosc: 3 4) creates the struct instance (ugen 'sinosc 'ar (3 
4)). *

The problem is, within a list it prints like '(#<sinosc:: 1 2>), which is 
quite ugly.

* I don't know if this is a smart choice. I'm building a SuperCollider 
client, and in SuperCollider there's hundreds of ugens (unit generators, 
such as oscillators, filters, etc).
Because there's hundreds of them, I thought it might be heavy on memory or 
cpu to declare a specific struct for each one of them; so I choose instead 
to declare only constructors that build different instances of the ugen 
struct.

-- 
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].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/56b85a49-2b64-465a-a58d-3b758aa823c5n%40googlegroups.com.

Reply via email to