packages feed

advent-of-code-ocr-0.1.0.0: app/ocr.hs

{-# LANGUAGE LambdaCase      #-}
{-# LANGUAGE RecordWildCards #-}

import           Advent.OCR
import           Options.Applicative
import           System.Exit
import           System.IO
import qualified Data.Set            as S

data Opts = Opts
    { oChars :: S.Set Char
    }
  deriving Show

parseOpts :: Parser Opts
parseOpts = Opts <$>
    option (S.fromList <$> str)
      ( long "chars"
     <> short 'c'
     <> help "characters to treat as \"on\"/included"
     <> value (S.singleton '#')
     <> showDefaultWith S.toList
     <> metavar "CHARS"
      )

main :: IO ()
main = do
    Opts{..} <- execParser $
      info (parseOpts <**> helper)
        ( fullDesc
       <> progDesc "Parse an ASCII image into its letters."
       <> header "advent-of-code-orc - Advent of Code ASCII parser"
        )
    inp <- getContents
    case asciiMapToLetters oChars inp of
      Nothing  -> do
        hPutStrLn stderr "No valid parse"
        exitFailure
      Just res -> putStrLn res