On this page:
enum
enum->string
enum->pretty-string
enum-value?
enum-value/ c
enum-prettify
define-enum

8 Enumerations (deprecated)

 (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-value/c enum)  flat-contract?
  enum : enum?
Returns a contract that accepts values from (enum-values enum).

(enum-prettify enum value [default])  string?
  enum : enum?
  value : symbol?
  default : (U string? (-> string?))
   = (cut raise-exn exn:fail:contract ...)
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.

(define-enum enum-id (value-clause ...) keyword-arg ...)
 
value-clause = value-id
  | [value-id pretty-expr]
  | [value-id value-expr pretty-expr]
     
value-expr = (U boolean? symbol? integer?)
     
pretty-expr = string?
     
keyword-arg = #:plural id
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