Sha256: 063a76e221cfa893f9e2e5a9daea3f430a63676fa4e9f521dc11a1d4a289b34b

Contents?: true

Size: 662 Bytes

Versions: 396

Compression:

Stored size: 662 Bytes

Contents

module Sieve (primesUpTo) where

import Control.Monad (when)
import qualified Data.Vector as V
import qualified Data.Vector.Mutable as MV

primesUpTo :: Int -> [Int]
primesUpTo upperBound = V.ifoldr f [] $ V.create $ do
  mv <- MV.replicate (1 + upperBound) (1 :: Int)
  when (upperBound >= 0) $ MV.write mv 0 0
  when (upperBound >= 1) $ MV.write mv 1 0
  go mv 2
  where
    f n 1 acc = n:acc
    f _ _ acc = acc
    go mv n | n > upperBound = return mv
            | otherwise      = do
              nPrime <- MV.read mv n
              when (nPrime == 1) $
                mapM_ (flip (MV.write mv) 0) [n+n, n+n+n .. upperBound]
              go mv (n + 1)

Version data entries

396 entries across 396 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/haskell/exercises/sieve/examples/success-standard/src/Sieve.hs
trackler-2.2.1.179 tracks/haskell/exercises/sieve/examples/success-standard/src/Sieve.hs
trackler-2.2.1.178 tracks/haskell/exercises/sieve/examples/success-standard/src/Sieve.hs
trackler-2.2.1.177 tracks/haskell/exercises/sieve/examples/success-standard/src/Sieve.hs
trackler-2.2.1.176 tracks/haskell/exercises/sieve/examples/success-standard/src/Sieve.hs
trackler-2.2.1.175 tracks/haskell/exercises/sieve/examples/success-standard/src/Sieve.hs
trackler-2.2.1.174 tracks/haskell/exercises/sieve/examples/success-standard/src/Sieve.hs
trackler-2.2.1.173 tracks/haskell/exercises/sieve/examples/success-standard/src/Sieve.hs
trackler-2.2.1.172 tracks/haskell/exercises/sieve/examples/success-standard/src/Sieve.hs
trackler-2.2.1.171 tracks/haskell/exercises/sieve/examples/success-standard/src/Sieve.hs
trackler-2.2.1.170 tracks/haskell/exercises/sieve/examples/success-standard/src/Sieve.hs
trackler-2.2.1.169 tracks/haskell/exercises/sieve/examples/success-standard/src/Sieve.hs
trackler-2.2.1.167 tracks/haskell/exercises/sieve/examples/success-standard/src/Sieve.hs
trackler-2.2.1.166 tracks/haskell/exercises/sieve/examples/success-standard/src/Sieve.hs
trackler-2.2.1.165 tracks/haskell/exercises/sieve/examples/success-standard/src/Sieve.hs
trackler-2.2.1.164 tracks/haskell/exercises/sieve/examples/success-standard/src/Sieve.hs
trackler-2.2.1.163 tracks/haskell/exercises/sieve/examples/success-standard/src/Sieve.hs
trackler-2.2.1.162 tracks/haskell/exercises/sieve/examples/success-standard/src/Sieve.hs
trackler-2.2.1.161 tracks/haskell/exercises/sieve/examples/success-standard/src/Sieve.hs
trackler-2.2.1.160 tracks/haskell/exercises/sieve/examples/success-standard/src/Sieve.hs