[Haskell-cafe] Re: Different choice operations in a continuation monad

Heinrich Apfelmus apfelmus at quantentunnel.de
Tue Jun 15 16:17:22 EDT 2010

Sebastian Fischer wrote:
>> Holger Siegel wrote: 
>>> orElse :: CMaybe a a -> CMaybe a a -> CMaybe r a
>>> CMaybe ca `orElse` CMaybe cb = CMaybe (\k -> (ca return `mplus` cb
>>> return) >>= k)
> I still don't understand why it is impossible to provide `orElse` with
> the original type. I will think more about the reason you gave.

The reason is that you have chosen the "wrong" type for your
continuation monad; it should be

  newtype CMaybe a = CMaybe (forall r. (a -> Maybe r) -> Maybe r)

Personally, I recommend to stop thinking about continuations altogether
and instead use the approach I've outlined in "The Operational Monad


to define and think about monads. In particular, performing the
refunctionalization I mentioned in the subsection "Connection with the
Continuation Monad" shows that the "right" type should indeed contain a
 forall r .

Heinrich Apfelmus


More information about the Haskell-Cafe mailing list