[[tags: egg]] == type-extensions [[toc:]] === Description Miscellaneous extensions for CHICKEN's type system. The source for this egg is available [[http://git.foldling.org/chicken-type-extensions.git|here]]. ==== Requirements * [[/egg/matchable|matchable]] === Usage {{type-extensions}} should be loaded as a compiler extension with the {{-extend}} (or {{-X}}) flag to {{csc}}: $ csc -extend type-extensions ==== API (define-type name) Shorthand for {{(define-type name (struct name))}}. (define-type (name var ...) type) Defines a complex type alias that can be used in place of {{type}}. In each usage, all instances of {{var}} in {{type}} will be replaced by the corresponding form from {{(name var ...)}}. (define-type (pair-of a) (pair a a)) (: pair (forall (a) (a -> (pair-of a)))) (define (pair x) (cons x x)) (compiler-typecase (pair 1) ((pair-of fixnum) (print '(pair-of fixnum))) (else (print 'else))) As with CHICKEN's built-in {{define-type}} form, type aliases defined inside a module are not visible outside of that module. ==== Type Syntax (list . type) (list type ...) A dotted tail or ellipsis at the end of a {{list}} type form is shorthand for a sequence of pairs followed by {{(list-of type)}}. ;; The following types are equivalent: (define-type a (list fixnum float . number)) (define-type b (list fixnum float number ...)) (define-type c (pair fixnum (pair float (list-of number)))) === Author [[/users/evan-hanson|Evan Hanson]] === License Copyright (c) 2014-2018, 3-Clause BSD.