Hi all, I'm not very current on the latest wonders of haskell typing, but I feel that something like the following should be possible: data ConnError = ... -- error propagating monad: instance Monad (Either ConnError) where (Left e) >>= _ = Left e (Right v) >>= f = f v return = Right -- combined IO & error propagating monads instance Monad (IO (Either ConnError a)) where -- (>>=) :: IO (Either ConnError a) -- -> (a -> IO (Either ConnError b)) -- -> IO (Either ConnError b) m >>= f = m >>= \e -> e >>= f return = return . return I know the first declaration works with GHC compiler flag "-fglasgow-exts", but something about the line "Monad (IO (Either ConnError a))" makes me (and the compiler) very nervous. How should I be expressing this? Yours expectantly, Warrick. _________________________________________________________________ MSN Photos is the easiest way to share and print your photos: http://photos.msn.com/support/worldwide.aspx