module Main where import qualified Data.ByteString.Lazy import Options.Applicative import Text.Html.Encoding.Detection newtype Detector = Detector { onFailure :: String } runDetector :: Detector -> IO () runDetector Detector { onFailure = onFailure' } = do html <- Data.ByteString.Lazy.getContents case detect html of Just encoding -> putStrLn encoding Nothing -> putStrLn onFailure' detector :: Parser Detector detector = Detector <$> strOption ( long "on-failure" <> short 'f' <> help "String to print when it fails to detect the character encoding" <> showDefault <> value "" ) detectorOpts :: ParserInfo Detector detectorOpts = info (detector <**> helper) ( fullDesc <> progDesc "Detect character encoding of HTML documents/fragments" ) main :: IO () main = runDetector =<< execParser detectorOpts