Going back to this, we should get:
> def keean f a b c d tst {
> if tst
> f a b
> else
> f a b c d
> }
keean : (a -?r1-> b -y-> c -?r2-> d -y-> j) -n-> a -n-> b -n-> c -n-> d
-n-> Bool -y-> c -?r2-> d -y-> j
I see now why '?r' needs to be a kind of variable, because we want to
maintain the 'link' between arrows, so that whatever ?r2 gets bound to (n
or y) is forced to be the same as all uses of ?r2 be the same.
The slightly worrying thing is now arrows have 'identity' in the same way a
type-variables are distinct.
I guess really -?r-> is a type variable of kind * -> *, compared with a
normal type variable that has kind '*'. Does that make sense?
Keean.
_______________________________________________
bitc-dev mailing list
[email protected]
http://www.coyotos.org/mailman/listinfo/bitc-dev