On Sun, Feb 18, 2007 at 05:06:33PM +0300, Bulat Ziganshin wrote:
> Hello Marc,
> 
> Sunday, February 18, 2007, 5:21:36 PM, you wrote:
> 
> > Why do I have to specify (Monad m) here again?
> 
> > class (Monad m) =>> GetMV m a where
> 
> > instance GetMV m c where
> 
> because you can find another way to ensure that m is monad. for
> example,
> 
> instance (MonadIO m) => GetMV m c where
> 
> if i not yet proposed you to read
> http://haskell.org/haskellwiki/OOP_vs_type_classes
> then now it is time to do it :)

I think I've read it once. But I'll do it again more thoroughly ..

I'll try to explain why I don't get it yet

        class (Monad m) => GetMV m a where (1)

tells that the first param called 'm' is an instance of class m, right?
Then it doesn't matter wether I use
        instance GetMV m          c where 
or
        instance GetMV <any name> c where

If the class sepecification (1) forces m to be a monad, <any name> has to be
one, too(?)

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?

Marc
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to