7 Enumerations
(require (planet untyped/unlib/enum)) |
Utilities for defining simple enumerations of booleans, symbols and integers. These are useful wherever you would normally use a small collection of literals to represent possible values of a variable, and test for value equality with eq?. The define-enum form binds the literals to Scheme identifiers so the compiler catches typos that might otherwise take a long time to debug.
(struct enum (name values pretty-values)) |
name : symbol? |
values : (listof (U boolean? symbol? integer?)) |
pretty-values : (listof string?) |
An enumeration. For each symbol in values there is a human-readable string equivalent in pretty-values.
(enum->string enum [separator]) → string? |
enum : enum? |
separator : string? = ", " |
Returns a string representation of (enum-values enum), useful for including in debugging output. separator is used to separate the enum values in the return value.
Examples: |
> (define-enum vehicle (car boat plane)) |
> (enum->string vehicle) |
"car, boat, plane" |
(enum->pretty-string enum [separator]) → string? |
enum : enum? |
separator : string? = ", " |
Returns a string representation of (enum-pretty-values enum), useful for describing the possible values to a user. separator is used to separate the enum values in the return value.
Examples: |
> (define-enum vehicle (car boat plane)) |
> (enum->pretty-string vehicle) |
"car, boat, plane" |
(enum-value? enum value) → boolean? |
enum : enum? |
value : any |
Returns #t if value is a member of (enum-values enum).
Examples: |
> (define-enum vehicle (car boat plane)) |
> (enum-value? vehicle 'car) |
#t |
> (enum-value? vehicle 'apple) |
#f |
(enum-prettify enum value [default]) → string? | ||||||||||||
enum : enum? | ||||||||||||
value : symbol? | ||||||||||||
|
Returns the pretty equivalent of value. If value is not found in enum, default is used instead:
if default is a procedure, it is called to determine the return value;
if default is not a procedure, it is returned.
Binds the following identifiers:
enum-id: an enumeration struct;
value-id (one binding per value): the values of the enumeration, each a symbol;
enum-id?: a predicate that recognises the values;
enum-id-out: a provide form that provides all of the above.
If value-expr and pretty-expr are unspecified for a value, they are created from value-id.
Examples: |
> (define-enum vehicle (car boat plane)) |
> car |
car |
> boat |
boat |
> plane |
plane |
> (vehicle? car) |
#t |
> (vehicle? 'apple) |
#f |
The optional #:prefix argument affects the names of the value identifiers (car, boat and so on) bound by the macro:
Examples: |
> (define-enum vehicle (car boat plane) #:prefix vehicle-) |
> vehicle-car |
car |
> vehicle-boat |
boat |
> vehicle-plane |
plane |