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 に対する特化型の指定がないため、コンパイルエラーとなる。