fork download
  1.  
  2. comb3 :: (a -> b -> c -> d) -> [a] -> [b] -> [c] -> [d]
  3. comb3 f xs ys zs = do
  4. x <- xs
  5. y <- ys
  6. z <- zs
  7. return $ f x y z
  8.  
  9. -- alternative version with (>>=) doing same thing:
  10. comb3a f xs ys zs = xs >>= \x -> ys >>= \y -> zs >>= \z -> return $ f x y z
  11.  
  12. triple :: a -> b -> c -> (a, b, c)
  13. triple x y z = (x, y, z)
  14.  
  15. main = do
  16. let xs = [1..3]
  17. let ys = ['a'..'c']
  18. let zs = [True, False]
  19. print $ comb3 triple xs ys zs
  20. print $ comb3a triple xs ys zs
  21.  
Success #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
[(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)]