
On Sun, Feb 18, 2007 at 06:59:32PM +0300, Bulat Ziganshin wrote:
Hello Marc,
Sunday, February 18, 2007, 7:32:54 PM, you wrote:
When using your example (Monad IO): class (Monad m) => MonadIO m where liftIO :: IO a -> m a it it basically the same, isn't it? This declaration forces m to be monad.. which would't hurt if GHC would infer m beeing a monad automatically?
it is more explicit. for example, this simplifies understanding of error messages generated by compiler. and, if you change 'class' declaration, this will not silently change meaning of 'instance' declaration
Is there a difference at all wehter specifying (Monad m) in the class declaration or not? I have to add it to the instance declaration anyway.. And if you don't want to change the meaning of instance declaration you would be able to add this constraint to indicate this. I don't see why it simplifies error messages. Marc