summaryrefslogtreecommitdiff
path: root/progs/demo/primes.hs
diff options
context:
space:
mode:
Diffstat (limited to 'progs/demo/primes.hs')
-rwxr-xr-xprogs/demo/primes.hs16
1 files changed, 16 insertions, 0 deletions
diff --git a/progs/demo/primes.hs b/progs/demo/primes.hs
new file mode 100755
index 0000000..6c8fe79
--- /dev/null
+++ b/progs/demo/primes.hs
@@ -0,0 +1,16 @@
+-- This program implements Eratosthenes Sieve
+-- to generate prime numbers.
+
+module Main where
+
+primes :: [Int]
+primes = map head (iterate sieve [2 ..])
+
+sieve :: [Int] -> [Int]
+sieve (p:ps) = [x | x <- ps, (x `mod` p) /= 0]
+
+main = appendChan stdout "How many primes? " abort $
+ readChan stdin abort $ \ input ->
+ appendChan stdout (show (take (read (head (lines input))) primes))
+ abort done
+