You are right, your solution is an elegant expression of a list-based optimized trial division (only tests primes up to the square root) and with the [Integer] output changed to [Int] is actually faster than simple list based SoE implementations for small ranges such as this up to two million.