Lauri Alanko <[email protected]> writes:
> On Tue, May 12, 2009 at 04:59:36PM -0400, Xiao-Yong Jin wrote:
>> > f :: a -> b
>> > g :: (a -> b) -> c -> d
>
>> > gf :: c -> d
>> > gf = g f
>>
>> Now I want to handle exceptions in f and redefine f as in f'
>>
>> > f' :: a -> IO (Either e b)
>>
>> So my question is how to define gf' now to use f' instead of
>> f?
>>
>> > gf' :: c -> IO (Either e d)
>
> Use Control.Monad.Error.ErrorT, it's exactly for this. You have to
> "monadize" g to be able to pass f' as an argument to it.
>
> f' :: a -> ErrorT e IO b
> g' :: Monad m => (a -> m b) -> c -> m d
> gf' :: c -> ErrorT e IO d
> gf' = g' f'
So there is no way to do it without "monadize" g to g', is
it? Big trouble, sigh.
--
c/* __o/*
<\ * (__
*/\ <
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe