Sha256: 0b81d8df1b26b239142a80a3bd7086fee5045d36fec749ab7f73d170c600cdcd

Contents?: true

Size: 845 Bytes

Versions: 94

Compression:

Stored size: 845 Bytes

Contents

module Frequency (frequency) where

import           Control.Parallel.Strategies (using, parListChunk, rdeepseq)
import           Data.Char (isLetter, toLower)
import           Data.Map (Map)
import qualified Data.Map as Map
import           Data.Ratio ((%))
import           Data.Text (Text)
import qualified Data.Text as T

-- | Compute the frequency of letters in the text using the given number of
--   parallel workers.
frequency :: Int -> [Text] -> Map Char Int
frequency workers texts =
    let chunkSize = ceiling (length texts % workers)
        freqs = map countLetters texts `using` parListChunk chunkSize rdeepseq
    in Map.unionsWith (+) freqs

countLetters :: Text -> Map Char Int
countLetters = T.foldl' process Map.empty
  where
    process m c | isLetter c = Map.insertWith (+) (toLower c) 1 m
                | otherwise  = m

Version data entries

94 entries across 94 versions & 1 rubygems

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