comb3 :: (a -> b -> c -> d) -> [a] -> [b] -> [c] -> [d] comb3 f xs ys zs = do x <- xs y <- ys z <- zs return $ f x y z -- alternative version with (>>=) doing same thing: triple :: a -> b -> c -> (a, b, c) triple x y z = (x, y, z) main = do let xs = [1..3] let ys = ['a'..'c'] let zs = [True, False] print $ comb3 triple xs ys zs print $ comb3a triple xs ys zs
Standard input is empty
[(1,'a',True),(1,'a',False),(1,'b',True),(1,'b',False),(1,'c',True),(1,'c',False),(2,'a',True),(2,'a',False),(2,'b',True),(2,'b',False),(2,'c',True),(2,'c',False),(3,'a',True),(3,'a',False),(3,'b',True),(3,'b',False),(3,'c',True),(3,'c',False)] [(1,'a',True),(1,'a',False),(1,'b',True),(1,'b',False),(1,'c',True),(1,'c',False),(2,'a',True),(2,'a',False),(2,'b',True),(2,'b',False),(2,'c',True),(2,'c',False),(3,'a',True),(3,'a',False),(3,'b',True),(3,'b',False),(3,'c',True),(3,'c',False)]