import Data.Char import Data.Map -- return a tuple of words, punctuation splitUp :: String -> ([String], [String]) splitUp s = (words s, dewords s) where dewords s = filter (not . isAlpha) s -- map: key is word, value is another map: key is second word, val is freq: 1/n data FreqTable = Map String (Map String Int) makeTable :: [String] -> FreqTable -> FreqTable makeTable (wa:wb:ws) table = if (member wa table) then if (member wb (table ! wa)) then let n = (table ! wa) ! wb in insert wb (n+1) (table ! wa) ! wb else insert wa 1 (table ! wa) ! wb else insert wa (fromlist [(wb, 1)])