В одном примере использования вы можете проверить недавний вопрос SO о ленивом поколении комбинаций.
Версия в принятом ответе излишне строго во втором аргументе и что здесь улучшено.
Ответ 3
Итак, почему вы думаете, что простой (concat. transpose) "недостаточно"? Я предполагаю, что вы пробовали что-то вроде:
interleave :: [a] -> [a] -> [a]
interleave = curry $ unfoldr g
where
g ([], []) = Nothing
g ([], (y:ys)) = Just (y, (ys, []))
g (x:xs, ys) = Just (x, (ys, xs))
Ответ 6
-- ++
pp [] [] = []
pp [] (h:t) = h:pp [] t
pp (h:t) [] = h:pp t []
pp (h:t) (a:b) = h : pp t (a:b)