On Jan 14, 2008 8:27 PM, apfelmus <[EMAIL PROTECTED]> wrote: > The type of contPromptM is even more general than that: > > casePromptOf' :: (r -> f b) > -> (forall a,b. p a -> (a -> f b) -> f b) > -> Prompt p r -> f b > casePromptOf' done cont (PromptDone r) = done r > casePromptOf' done cont (Prompt p c ) = cont p (casePromptOf' done cont . > c)
(I guess the forall b inside 'cont' is a typo?) Actually, it can be as general as casePromptOf :: (r -> b) -> (forall a. p a -> (a -> b) -> b) -> Prompt p r -> b casePromptOf done cont (PromptDone r) = done r casePromptOf done cont (Prompt p c ) = cont p (casePromptOf done cont . c) =) And, just for the record, runPromptAgain :: Monad m => (forall a. p a -> m a) -> Prompt p r -> m r runPromptAgain f = casePromptOf return ((>>=) . f) > The link to ContT m a = (forall b . (a -> m b) -> m b) is apparent in > the case of casePromptOf' and is no surprise: you can omit p a and > Prompt p r entirely and implement them directly as continuations > (thereby loosing the ability to use it with different m, which would > defeat the whole point here.) See also > > Implementing the State Monad. > http://article.gmane.org/gmane.comp.lang.haskell.cafe/31486 > > for the details. I've read that e-mail when it was sent but didn't understand it fully. I guess now I'm in a better condition, but I still have a lot to learn about these little warm, fuzzy things. Actually, the more I see, the less I understand why some people are afraid of them... it must really be the name 'monad'. Thanks for all the help guys! Next I'll try to reproduce the freezes I was getting with my first forkIO approach. Cheers, -- Felipe. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe