Next: built-in wildcard, Previous: built-in top, Up: built-in [Contents][Index]
A conventional type that is the sub–type of all the other types.
We must never use <bottom> as type annotation for variables,
because no value is of this type:
(define {O <bottom>}
123)
error→ &expand-time-type-signature-violation
(let (({O <bottom>} 123))
O)
error→ &expand-time-type-signature-violation
casting to <bottom> also fails:
(cast-signature (<bottom>) 123) error→ &expand-time-type-signature-violation (unsafe-cast-signature (<bottom>) 123) error→ &expand-time-type-signature-violation
The expressions that raise a non–continuable exception have type
<bottom>:
(type-of (error #f "wrong")) ⇒ #[signature <bottom>]
notice that the type signature is the improper list <bottom>,
not the list (<bottom>).
As usage example, the following type annotation defines a function signature in which the argument can be any value:
(define-type <my-func> (lambda (<bottom>) => (<string>)))
<bottom> is removed from union and intersection type annotations:
(type-annotation (and <bottom> <fixnum>)) ⇒ #[core-type-spec #[type (<fixnum>)]] (type-annotation (or <bottom> <fixnum>)) ⇒ #[core-type-spec #[type (<fixnum>)]]