Am Mittwoch, 21. Mai 2008 18:31 schrieb Bulat Ziganshin: > Hello HP, > > Wednesday, May 21, 2008, 8:11:56 PM, you wrote: > > Suppose p1, p2, p3 are 3 predicates > > that take an input -- say, a String. > > They return either (True, result) > > or False. > > impossible because these are different types :)) > > if they return Just result or Nothing - yes, use Maybe as monad: > > combine p1 p2 p3 x= do x1 <- p1 x > x2 <- p2 x1 > x3 <- p3 x2 > return x3 > > or shortly > > combine p1 p2 p3 x = p1 x >>= p2 >>= p3
Actually, (s)he wanted a sort of catch chain, so import Control.Monad -- for MonadPlus combine p1 p2 p3 x = p1 x `mplus` p2 x `mplus` p3 x or combine ps x = msum $ map ($ x) ps or just case p1 x of Just r -> return r Nothing -> case p2 x of Just r -> return r Nothing -> ... _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users