14 lines
423 B
Racket
14 lines
423 B
Racket
#lang racket/base
|
|
|
|
(provide prop:convertible convertible? convert)
|
|
|
|
(define-values (prop:convertible convertible? convertible-ref)
|
|
(make-struct-type-property 'convertible))
|
|
|
|
(define (convert v target [default #f])
|
|
(unless (convertible? v)
|
|
(raise-type-error 'convert "convertible" 0 v target))
|
|
(unless (symbol? target)
|
|
(raise-type-error 'convert "symbol" 1 v target))
|
|
((convertible-ref v) v target default))
|