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:[EMAIL PROTECTED]



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

Reply via email to