chitauri-0.1.0.0: app/Main.hs
module Main where
import Parser (parseDictionary, dictionary)
import PhoneticWord (PhoneticWord(..))
import PhoneticDictionary (PhoneticDictionary)
import qualified Data.GenericTrie as T
import qualified System.Console.Haskeline as H
import Data.Either.Unwrap (fromRight)
import Text.Read (readMaybe)
import Data.Char (digitToInt, isDigit)
import Data.Maybe (fromMaybe)
main :: IO ()
main = do
dict <- dictionary
let parsed = parseDictionary dict
case parseDictionary dict of
Left a -> print a
Right a -> mainLoop a
mainLoop dict = H.runInputT H.defaultSettings loop
where
loop :: H.InputT IO ()
loop = do
minput <- H.getInputLine "> "
case minput of
Nothing -> return ()
Just "quit" -> return ()
Just input -> do
H.outputStrLn . formatPhoneticWords . findWords dict $ stringToDigits input
loop
stringToDigits :: String -> [Int]
stringToDigits = fmap digitToInt . filter isDigit
formatPhoneticWords :: [PhoneticWord] -> String
formatPhoneticWords pWords = unlines $ zipWith formatPhoneticWord pWords [0..]
where
formatPhoneticWord :: PhoneticWord -> Int -> String
formatPhoneticWord pWord i = show i ++ ") " ++ word pWord
findWords :: PhoneticDictionary -> [Int] -> [PhoneticWord]
findWords dict ds = fromMaybe [] $ T.lookup ds dict