packages feed

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