Concurrent Clean : 型クラスと存在型
ちょっと思うことがあっていろいろ試していたら、http://lethevert.blogspot.com/2006/10/what-does-this-program-means.htmlのようなバグ(?)を見つけたわけですが、
一番やりたいことはこういうことで、
::Number | Arith a :== a
あるいは、
::Number :== E.(Arith a): a
みたいな。
Arithクラスが
class Arith a where add :: a a -> a sub :: a a -> a mul :: a a -> a div :: a a -> a
だとすれば、
::Number = E.a: {num :: a ,add :: a -> a -> a ,sub :: a -> a -> a ,mul :: a -> a -> a ,div :: a -> a -> a }
というレコードを内部的に作ってくれるだけでよくて、関数呼び出しではそういうことをやっているのだからなーと。
-
-
- -
-
あー、でもいろいろ難しいなー。
説明するのめんどいけど。