type-extensions

  1. type-extensions
    1. Description
      1. Requirements
    2. Usage
      1. API
      2. Type Syntax
    3. Author
    4. License

Description

Miscellaneous extensions for CHICKEN's type system.

The source for this egg is available here.

Requirements

Usage

type-extensions should be loaded as a compiler extension with the -extend (or -X) flag to csc:

   $ csc -extend type-extensions <file>

API

[syntax] (define-type name)

Shorthand for (define-type name (struct name)).

[syntax] (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

[syntax] (list . type)
[syntax] (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

Evan Hanson

License

Copyright (c) 2014, 3-Clause BSD.