Concurrent Clean : Re: 型クラスと存在型

[id:lethevert:20061016:p1]では、ちょっと何がいいたいかよく分からなくなっていたのだけれど、

::Number :== E.(Arith a): Number ((a -> a) -> Number)
introNumber :: a -> Number | Arith a
introNumber n = app
  where
    app f = introNumber (f n)
appNumber :: (a -> a) f -> Number | Arith a
appNumber f (Number app) = app f

とかあって、

Start = incNumber (incNumber (incNumber (introNumber 1)))
  where
    incNumber = appNumber inc

が「introNumber 4」になるみたいな。

      • -

やっぱりわけわからん。