module Intersect where intersect :: (Ord t) => [t] -> [t] -> [t] intersect a [] = [] intersect [] a = [] intersect (x:xs) (y:ys) | x == y = x : intersect xs ys | x < y = intersect xs (y:ys) | y > y = intersect (x:xs) ys intersectAll :: (Ord t) => [[t]] -> [t] intersectAll (l:ls) = (foldr intersect l) ls intersectAll [] = undefined multiples n = [n*k | k <- [1..]] commonMultiples a b c = intersectAll [ multiples n | n <- [a,b,c]]