{-# OPTIONS_GHC -O2 -fno-cse #-} primesTME = 2 : gaps 3 (joinT [[p*p, p*p+2*p..] | p <- primes']) where primes' = 3 : gaps 5 (joinT -- [[p*p, p*p+2*p..] | p <- primes']) [map (p*) $ scanl (+) p (cycle[2]) | p <- primes']) joinT ((x:xs):t) = x : union xs (joinT (pairs t)) pairs ((x:xs):ys:t) = (x : union xs ys) : pairs t gaps k s@(x:xs) | k x : union xs (y:ys) EQ -> x : union xs ys GT -> y : union (x:xs) ys