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

Sebastian Fischer sebf at informatik.uni-kiel.de
Tue Jun 15 12:11:30 EDT 2010

Hello Holger,

>> Can you define an associative operation
>>   orElse :: CMaybe r a -> CMaybe r a -> CMaybe r a
>> with identity `mzero` that satisfies the cancellation law?
> No, because that function would need to cancel values of type a, but  
> the arguments of type (CMaybe r a) can only compute values of type r.

I'm afraid, I don't understand.

> But you can define
> orElse :: CMaybe a a -> CMaybe a a -> CMaybe r a
> CMaybe ca `orElse` CMaybe cb = CMaybe (\k -> (ca return `mplus` cb  
> return) >>= k)

Good point.

But with this restricted type `orElse` is less useful. For example,  
one cannot compute

     fromCMaybe ((return False `orElse` return True) >>= guard)

because there, the arguments of `orElse` are of type `CMaybe () Bool`.



  > fromCMaybe :: CMaybe a a -> Maybe a
  > fromCMaybe (CMaybe ca) = ca Just

Underestimating the novelty of the future is a time-honored tradition.

More information about the Haskell-Cafe mailing list