43 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Haskell
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Haskell
		
	
	
	
	
	
{-# LANGUAGE RecordWildCards #-}
 | 
						|
--------------------------------------------------------------------------------
 | 
						|
module Main where
 | 
						|
--------------------------------------------------------------------------------
 | 
						|
import Options.Applicative
 | 
						|
import Data.Semigroup ((<>))
 | 
						|
 | 
						|
import qualified Transforms
 | 
						|
import qualified Keyboard
 | 
						|
import qualified App
 | 
						|
--------------------------------------------------------------------------------
 | 
						|
 | 
						|
data CommandArgs = CommandArgs
 | 
						|
  { transforms :: String
 | 
						|
  , passage :: String
 | 
						|
  } deriving (Eq, Show)
 | 
						|
 | 
						|
parseArgs :: Parser CommandArgs
 | 
						|
parseArgs =
 | 
						|
  CommandArgs <$> strOption
 | 
						|
                  ( long "transforms"
 | 
						|
                 <> short 't'
 | 
						|
                 <> help "String of transforms where (e.g. \"HHVS12VHVHS3\")" )
 | 
						|
              <*> strOption
 | 
						|
                  ( long "passage"
 | 
						|
                 <> short 'p'
 | 
						|
                 <> help "Input text to re-type" )
 | 
						|
 | 
						|
main :: IO ()
 | 
						|
main = do
 | 
						|
  CommandArgs{..} <- execParser opts
 | 
						|
  case Transforms.fromString transforms of
 | 
						|
    Nothing -> putStrLn "You must provide valid input (e.g. \"HHVS12VHVHS3\")"
 | 
						|
    Just xs -> do
 | 
						|
      let keyboard = foldl App.transform Keyboard.qwerty (Transforms.optimize xs)
 | 
						|
      putStrLn $ "Typing: \"" ++ passage ++ "\"\nOn this keyboard:\n" ++ show keyboard
 | 
						|
      case App.retypePassage passage keyboard of
 | 
						|
        Nothing -> putStrLn $ "Looks like at least one of the characters in your input passage doesn't fit on our QWERTY keyboard: \n" ++ show Keyboard.qwerty
 | 
						|
        Just result -> putStrLn $ "Result: " ++ result
 | 
						|
  where
 | 
						|
    opts = info (parseArgs <**> helper)
 | 
						|
      ( fullDesc
 | 
						|
     <> progDesc "Transform a QWERTY keyboard using a string of commands")
 |