module WordCount exposing (..)

import String
import Dict exposing (Dict)
import Regex


wordCount : String -> Dict String Int
wordCount sentence =
    sentence
        |> String.toLower
        |> depunctuate
        |> String.words
        |> List.foldl (\w d -> Dict.update w incrMaybe d) Dict.empty


depunctuate : String -> String
depunctuate =
    Regex.replace Regex.All (Regex.regex "[^a-z0-9 ]") (\_ -> "")


incrMaybe : Maybe Int -> Maybe Int
incrMaybe maybe =
    (Maybe.withDefault 0 maybe) + 1 |> Just