Lauri Alanko <l...@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/* <\ * (__ */\ < _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe