Hello Taral, Wednesday, August 16, 2006, 1:25:03 AM, you wrote: >> in this case we lose "class Functor a => Monad a" base class >> declaration. so what will be the meaning of this:
> I don't see why that is the case. > class Functor m => Monad m where > return :: a -> m a > (>>=) :: m a -> (a -> m b) -> m b > instance Functor m where > fmap f = (>>= return . f) > What's wrong with this? All Monads are Functors. If you don't provide > a Functor, it gets defined for you. The problem is working out whether > to use the default Functor or an external Functor. you deleted context of my note, where you wrote something opposite to "All Monads are Functors": > Not necessarily. If A doesn't have any Functor declarations, it could > be considered just a Monad without a Functor. is it possible to declare Monad Foo without Functor Foo with the above class definition? i think no. Functor instance will be either defaulted or explicitly defined. so both modules, A and B, actually defines _both_ instances, although A defines Functor Foo implicitly while B does it explicitly. importing both modules will mean importing two different declaration of both instances, Functor Foo and Monad Foo -- Best regards, Bulat mailto:[EMAIL PROTECTED] _______________________________________________ Haskell-prime mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-prime
