(class C () ...) あるいは(type T () ...)による宣言によっ
てできるようになることは, 単にその型を持つ変数や関数を定義したり, その
型を他の型の要素のとして使用できるようになるだけのことである.
例えば, (class C () ...)によってCを宣言しただけでは,
Cに対するメソッドを定義したり, C型のオブジェクトを作った
りすることはできない. 同様に, (type T () ...)によって
Tを宣言しただけでは, T型のデータにmatchを施したり,
T型のデータを作ったりはできない. 例えば次はエラーである.
(class B ()) (defmethod B m () (declare (reply-type unit)) (printn "hello"))これは, メソッドの中では
Bのインスタンス変数を読むかも知れないか
ら, 容易に納得できる制限であろう.