
Hello Juan, Thursday, September 01, 2005, 12:03:15 PM, you wrote: JCAB> instance MyNum Int where JCAB> (.+) a b = a + b JCAB> instance (Monad m, MyNum v) => MyNum (m v) where JCAB> (.+) a b = do JCAB> ra <- a JCAB> rb <- b JCAB> return (ra .+ rb) JCAB> Just beware: to make this i think, it is very practical. we can make alternative Prelude, this question has been already discussed in light of redefining some list functions (append, head...) as belonging to some Collection class interestingly that Template Haskell, which uses Q monad to generate unique identifiers, also use technique of defining rich set of operations working immediately with monadic values. module Language.Haskell.TH.Lib is full of definitions like this: infixP p1 n p2 = do p1' <- p1 p2' <- p2 return (InfixP p1' n p2') btw, such definitions can be simplified by using liftM/ap operations: instance (Monad m, MyNum v) => MyNum (m v) where (.+) = liftM2 (.+) real program will also need mixed operations, for example addition of variable and constant -- Best regards, Bulat mailto:bulatz@HotPOP.com