
Thanks for your help.
I have try your code ghci and I think there is a mistake in the definition of (>>=) operator.
Hmm. I belive I tested code before (at least type-check) sending but it is possible.
test1 m f = IOException $ runIOException m >>= runIOException . f :t test1 test1 :: IOException a -> (Exception a -> IOException a) -> IOException a
I think the defintion is: test :: IOException a -> ( a -> IOException a) -> IOException a
Ups. You're right. Quick'n'dirty version with do: instance Monad IOException where return = IOException . return . return m >>= f = IOException $ do m' <- runIOException m case m' of Success _ v -> runIOException $ f v Exception e -> return $ Exception e
1. why I am not using monoid? I try to bind C code and the function return only one warning. But if I change i little the structure of IOException, it may have sense to use a List. newtype IOException a = IOException {runIOException :: ([Warning] -> IO (Exception a))}
Well. The problem with returning one - what should be combination of warnings. It is of course problem-dependent. Regards