Ticket #948: spaceleak.hs

File spaceleak.hs, 835 bytes (added by simonmar, 8 years ago)
Line 
1import System.Environment
2import Data.List
3import Data.Char
4import qualified Data.Map as Map
5
6custwords = filter (/= "") . lines . map (conv . toLower)
7    where iswordchar x = isAlphaNum x && isAscii x
8          conv x = if iswordchar x then x else '\n'
9
10wordfreq inp = Map.toList $ foldl' updatemap (Map.empty::Map.Map String Int) inp
11    where updatemap nm word = {-# SCC "updatemap" #-} Map.insertWith updatefunc word 1 nm
12          updatefunc _ x = {-# SCC "updatefunc" #-} x + 1
13
14freqsort (w1, c1) (w2, c2) = if c1 == c2
15                                 then compare w1 w2
16                                 else compare c2 c1
17
18showit (word, count) = show count ++ " " ++ word
19main = do args <- getArgs
20          interact $ unlines . map showit . take (read . head $ args) .
21                     sortBy freqsort . wordfreq . words