
At 2002-02-20 22:15, I wrote (on the Haskell list):
Haskell? Given this:
class (Monad m) => PeirceMonad m where { peirceM :: ((a -> m b) -> m a) -> m a; };
...which Monads can be made PeirceMonads?
This is untested, but... instance PeirceMonad IO where { peirceM foo = do { ref <- newIORef Nothing; catch (foo (\a -> do { writeIORef ref (Just a); ioError (userError "break"); })) (\ex -> do { ma <- readIORef ref; case ma of { Just a -> return a; _ -> ioError ex; }; }) } }; So you can do it if you have refs and throw/catch for your monad. I think. -- Ashley Yakeley, Seattle WA