Question regarding arrows...
MR K P SCHUPKE
k.schupke@imperial.ac.uk
Sun, 6 Jul 2003 17:31:59 +0100 (BST)
I am trying to define the left operator for a CPS arrow of type:
newtype CPSFunctor ans a b c = CPS ((a c ans) -> (a b ans))
This is the definition given by John Hughes for first:
first (CPS f) = CPS $ \k -> arr (\(b,d) -> (f (arr (\c -> (c,d)) >>> k),b)) >>> app
So I try and apply this to left and get:
left (CPS f) = CPS $ \k -> arr (\z -> case z of
Left x -> (f (arr Left >>> k),x)
Right x -> (arr Right >>> k,x)) >>> app
But when I compile (with ghc-6.0) I get:
Inferred type is less polymorphic than expected
Quantified type variable `d' is unified with another quantified type variable `b'
When trying to generalise the type inferred for `left'
Signature type: forall ans a.
(ArrowApply a, ArrowChoice a) =>
forall b1 c1 d1.
CPSFunctor ans a b1 c1
-> CPSFunctor ans a (Either b1 d1) (Either c1 d1)
Type to generalise: forall b1 c1 d1.
CPSFunctor ans a b1 c1
-> CPSFunctor ans a (Either b1 d1) (Either c1 d1)
In the instance declaration for `ArrowChoice (CPSFunctor ans a)'
Hughes says in his paper that "CPS arrows ... can of course support dynamic choice" - so where am I going wrong with my definition?
Any help greatly appreciated...
Regards,
Keean Schupke.