Concurrent Clean : 型クラスとspecial

型クラスのインスタンスにはspecialを付けることで特化関数を生成することができる。

class Deque q a
instance Deque (FingerTree v) a | Monoid v
  special v = Int; v = Real

と書くと、FingerTree v aのDeque操作に関する関数群に、一般の型に対する関数の他に、v = Int と v = Real についての特化した関数が作られる。特化関数は、関数辞書を渡す必要がないため、効率が向上する。
さて、このspecial指定だけれども、型コンテキストに現れる全ての型を指定していないと、不正な指定であると怒られる。例えば、

class Deque q a
instance Deque (FingerTree v) a | Measured a v
  special v = Int; v = Real

と書くと、a に対する特化型の指定がないため、コンパイルエラーとなる。