## Full example

    ; Source: https://github.com/mbutterick/pollen/blob/master/pollen/private/to-string.rkt

    #lang racket/base
    (provide (all-defined-out))

    (define (to-string x)
      (cond
        [(string? x) x]
        [(or (null? x) (void? x)) ""]
        [(or (symbol? x) (number? x) (path? x) (char? x)) (format "~a" x)]
        ;; special handling for procedures, because if a procedure reaches this func,
        ;; it usually indicates a failed attempt to use a tag function.
        ;; meaning, it's more useful to raise an error.
        [(procedure? x) (error 'pollen "Can't convert procedure ~a to string" x)]
        [else (format "~v" x)]))