[Haskell-cafe] IO trouble
Xiao-Yong Jin
xj2106 at columbia.edu
Wed May 13 08:32:17 EDT 2009
Lauri Alanko <la at iki.fi> 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/*
<\ * (__
*/\ <
More information about the Haskell-Cafe
mailing list