# [Haskell-cafe] Problem with continuations and typing

tpledger at ihug.co.nz tpledger at ihug.co.nz
Sun Dec 4 16:34:36 EST 2005

```Jerzy Karczmarczuk wrote:
:
| zeros fc sc = sc 0 zeros
|
| fails to compile as well. *I do not ask why, I know*.
|
| But I would like to continue this exercice along these
lines, without too much
| exotism (no monads, yet...), for my students. Do you have
any simple work-around?
| Introduce some algebraic constructors? Perhaps
higher-rank polymorphism could do
| something (but then I would have to explain it to my
folk...)
:

> newtype G a b = G{ unG :: b -> (a -> G a b -> b) -> b }
> glist g       = unG g [] (\b g' -> b : glist g')
> zeros         = G (\no yes -> yes 0 zeros)
> disj  g1 g2   = G (\no yes -> unG g1 (unG g2 no yes)
>                                      (\b g1' -> yes b
(disj g1' g2)))

I haven't had much practice with continuations, so don't
know whether I've just lost some generality there.

But it does support *some* avoidance of higher-rank
polymorphism, through the use of good old partial
application.  For example, the type of the state variable s
doesn't leak into the result type of unfold:

> unfold f s    = G (\no yes -> case f s of
>                     Nothing      -> no
>                     Just (s', b) -> yes b (unfold f
s'))

HTH,
Tom
```