Continuation Passing Style

Ashley Yakeley
Thu, 14 Mar 2002 18:29:29 -0800

At 2002-03-14 16:10, Tom Bevan wrote:

>I noticed that Ralf Hinze posted a CPS monad yesterday.

He did? Anyway I have one here:


Basically it's this:

  newtype CPS ex p a = MkCPS {unCPS :: (ex -> p) -> (a -> p) -> p};

'ex' is exception, so that I can make it an instance of MonadError.

>Would someone be kind enough to post a simple example of a function that 
>uses CPS.

Once you've made it an instance of Monad, of course you can just use 'do' 
notation. But I use CPS here (for my Scheme interpreter) because you can 
do call-with-current-continuation.

Ashley Yakeley, Seattle WA