-- Triangle, pentagonal, and hexagonal numbers are generated by the following formulae: -- -- Triangle T[n]=n(n+1)/2 1, 3, 6, 10, 15, ... -- Pentagonal P[n]=n(3n−1)/2 1, 5, 12, 22, 35, ... -- Hexagonal H[n]=n(2n−1) 1, 6, 15, 28, 45, ... -- -- It can be verified that T[285] = P[165] = H[143] = 40755. -- -- Find the next triangle number that is also pentagonal and hexagonal. import Euler triangles, pentagonals, hexagonals :: [Int] triangles = map (\n -> n*(n+1) `div` 2) [1..] pentagonals = map (\n -> n*(3*n-1) `div` 2) [1..] hexagonals = map (\n -> n*(2*n-1)) [1..] main = print $ go triangles pentagonals $ dropWhile (<= 40755) hexagonals where go ts@(t:_) ps@(p:_) hs@(h:_) | (t == p) && (t == h) = t | h < t || h < p = go ts ps (tail hs) | otherwise = go (dropWhile (< h) ts) (dropWhile (< h) ps) hs