Skip to content
This repository was archived by the owner on Mar 28, 2024. It is now read-only.

digikar99/trivial-types

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Experienced lispers are welcome to take over the maintenance of this library. In the meantime, I'll try my best to maintain, I myself do need this library. I no longer use or maintain this library and have moved over to peltadot - the problems of lisp's types are far too complex to be solved trivially.

trivial-types - Trivial type definitions

TRIVIAL-TYPES provides missing but important type definitions such as PROPER-LIST, ASSOCIATION-LIST, PROPERTY-LIST and TUPLE.

By using these types, you can keep type declarations more accurate. For example, you may write a class definition like:

(defclass person ()
  ((name :type string))
  ((age :type fixnum))
  ((friends :type list)))

However, it is not obvious for anyone except you that FRIENDS slot has only a list of person. If you want declare FRIENDS slot more accurately, PROPER-LIST is the best for that:

(defclass person ()
  ((name :type string))
  ((age :type fixnum))
  ((friends :type (proper-list person))))

In addition, TRIVIAL-TYPES also provides standard designators defined in ANSI standard such as PACKAGE-DESIGNATOR. They are useful when you write a function that takes a package-oid argument like:

(defun list-external-symbols (package)
  (declare (package-designator package))
  (loop for symbol being the external-symbol of package
        collect symbol))

[Package] trivial-types

[Function] proper-list-p

proper-list-p object

Returns true if OBJECT is a proper list.

Examples:

(proper-list-p 1) => NIL
(proper-list-p '(1 . 2)) => NIL
(proper-list-p nil) => T
(proper-list-p '(1 2 3)) => T

[Type] proper-list

proper-list &optional (element-type '*)

Equivalent to (and list (satisfies proper-list-p)). ELEMENT-TYPE is just ignored.

Examples:

(typep '(1 2 3) '(proper-list integer)) => T
(typep '(1 2 3) '(proper-list string)) => T

[Function] property-list-p

property-list-p object

Returns true if OBJECT is a property list.

Examples:

(property-list-p 1) => NIL
(property-list-p '(1 2 3)) => NIL
(property-list-p '(foo)) => NIL
(property-list-p nil) => T
(property-list-p '(foo 1)) => T
(property-list-p '(:a 1 :b 2)) => T

[Type] property-list

property-list &optional (value-type '*)

Equivalent to (and list (satisfies property-list-p)). VALUE-TYPE is just ignored.

Examples:

(typep '(:a 1 :b 2) '(property-list integer)) => T
(typep '(:a 1 :b 2) '(property-list string)) => T

[Function] association-list-p

association-list-p var

Returns true if OBJECT is an association list.

Examples:

(association-list-p 1) => NIL
(association-list-p '(1 2 3)) => NIL
(association-list-p nil) => T
(association-list-p '((foo))) => T
(association-list-p '((:a . 1) (:b . 2))) => T

[Type] association-list

association-list &optional (key-type '*) (value-type '*)

Equivalent to (proper-list (cons KEY-TYPE VALUE-TYPE)). KEY-TYPE and VALUE-TYPE are just ignored.

Examples:

(typep '((:a . 1) (:b . 2)) '(association-list integer)) => T
(typep '((:a . 1) (:b . 2)) '(association-list string)) => T

[Function] tuplep

tuplep object

Returns true if OBJECT is a tuple, meaning a proper list.

Examples:

(tuplep 1) => NIL
(tuplep '(1 . 2)) => NIL
(tuplep nil) => T
(tuplep '(1 2 3)) => T

[Type] tuple

tuple &rest element-types

Equivalent to (and list (cons ARG1 (cons ARG2 (cons ARG3 ...)))) where ARGn is each element of ELEMENTS-TYPES.

Examples:

(typep 1 'tuple) => NIL
(typep '(1 . 2) 'tuple) => NIL
(typep '(1 2 3) 'tuple) => NIL
(typep '(1 2 3) '(tuple integer integer)) => NIL
(typep '(1 2 3) '(tuple string integer integer)) => NIL
(typep nil 'tuple) => T
(typep nil '(tuple)) => T
(typep '(1 2 3) '(tuple integer integer integer)) => T

[Type] character-designator

character-designator

[Type] function-designator

function-designator

[Type] file-position-designator

file-position-designator

[Type] list-designator

list-designator

[Type] package-designator

package-designator

[Type] pathname-designator

pathname-designator

[Type] stream-designator

stream-designator

[Type] string-designator

string-designator

[Function] file-associated-stream-p

file-associated-stream-p stream

Returns true if STREAM is a stream associated to a file.

[Type] file-associated-stream

file-associated-stream

Equivalent to (and stream (satisfies file-associated-stream-p)).

[Type] non-nil

non-nil &optional type

Equivalent to (and (not null) TYPE) if TYPE is given, otherwise (not null).

Examples:

(typep nil '(non-nil symbol)) => NIL

[Function] type-specifier-p

type-specifier-p type-specifier

Returns true if TYPE-SPECIFIER is a valid type specfiier.

[Function] type-expand

type-expand type-specifier &optional env

Expand TYPE-SPECIFIER in the lexical environment ENV.

Authors

  • Tomohiro Matsuyama

License

LLGPL

About

Trivial type definitions for Common Lisp

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Common Lisp 100.0%