// Prime counting benchmark - count primes up to N
fn isPrime(n: Int): Bool = {
    if n < 2 then false
    else if n == 2 then true
    else if n % 2 == 0 then false
    else isPrimeHelper(n, 3)
}

fn isPrimeHelper(n: Int, i: Int): Bool = {
    if i * i > n then true
    else if n % i == 0 then false
    else isPrimeHelper(n, i + 2)
}

fn countPrimes(n: Int): Int = {
    let nums = List.range(2, n + 1)
    let primes = List.filter(nums, fn(x: Int): Bool => isPrime(x))
    List.length(primes)
}

fn main(): Unit = {
    let count = countPrimes(10000)
    Console.print("Primes up to 10000: " + toString(count))
}
