crosscombine f cl@(x : l)
    | any null cl = []
    | otherwise = [ f a b | a <- x, b <- crosscombine f l ]
crosscombine f cl@(x : l)
    | any null cl = []
    | otherwise = [ f a b | a <- x, b <- crosscombine f l ]
crosscombine f cl@(x : l)
    | any null cl = []
    | otherwise = [ f a b | a <- x, b <- crosscombine f l ]