Concurrent Clean : 型クラスの悩み

いろいろな操作を型クラスで統合して、さまざまなコンテナを同じ操作で扱えるようにしてみたら、いままで単純に扱えていた操作が型コンテキストを必要とするようになって、逆に面倒になってしまったという罠。
もっとも、リスト操作でもっとも重要な length, ++ は型コンテキスト不要なので、無視できると言えなくもない。

      • -

lengthの型クラスの宣言

class length m	:: !(m a) -> int

のようにすると、型コンテキストを付加しないでよいということに気づいた。

class !! q :: !(q a) !Int -> a

という宣言に変えた所、型コンテキストなしで使えるようになった。
これだと、文字列配列のように、a の型が特殊なものについて特別な実装を行うことができないが、前述のように、文字列については操作体系をわけることで、この問題は回避できるので、これは無視できる。
この方向で再度書き直すことにする。